home *** CD-ROM | disk | FTP | other *** search
/ 60 Years Brother 1954 - 2014 / 60thBook.bin / BROTHER 60th CD / Brother_60th_Anniversary_flip book for PC.exe / html5forwebkit.js < prev    next >
Text File  |  2014-02-09  |  246KB  |  7,028 lines

  1. var $estr = function() { return js.Boot.__string_rec(this,''); };
  2. function $extend(from, fields) {
  3.     function inherit() {}; inherit.prototype = from; var proto = new inherit();
  4.     for (var name in fields) proto[name] = fields[name];
  5.     return proto;
  6. }
  7. var CData = function() {
  8. };
  9. CData.__name__ = true;
  10. CData.prototype = {
  11.     __class__: CData
  12. }
  13. var FlipBook = function() {
  14.     this.bFlipping = false;
  15.     this.bShowBottomBar = true;
  16.     this.bCanGestureZoom = true;
  17.     this.bStartNoteGesture = false;
  18.     this.currentNote = null;
  19.     this.bStartNote = false;
  20.     this.bStartHighLightGesture = false;
  21.     this.currentHighLight = null;
  22.     this.bStartHighLight = false;
  23.     this.gestureLastY = -1;
  24.     this.gestureLastX = -1;
  25.     this.gestureMoveY = 0;
  26.     this.gestureMoveX = 0;
  27.     this.currentMoveY = 0;
  28.     this.currentMoveX = 0;
  29.     this.init_moveY = 0;
  30.     this.init_moveX = 0;
  31.     this.totalLast = 0;
  32.     this.totalDistance = 0;
  33.     this.last_moveY = 0;
  34.     this.last_moveX = 0;
  35.     this.page_offsetY = 0;
  36.     this.page_offsetX = 0;
  37.     this.realScale = 1;
  38.     this.totalGeustureScale = 0;
  39.     this.gestureScale = 1;
  40.     this.startFingerDistance = 0;
  41.     this.startZoomGesture = false;
  42.     this.rightPageNum = -1;
  43.     this.leftPageNum = -1;
  44.     this.bookContext = new core.BookContext();
  45.     this.tweener = new core.Tweener();
  46.     this.currentPageNum = 0;
  47.     this.zoomStatus = core.ZoomStatus.normal;
  48. };
  49. FlipBook.__name__ = true;
  50. FlipBook.prototype = {
  51.     f_sort: function(x,y) {
  52.         if(x.pageNum > y.pageNum) return 1;
  53.         if(x.pageNum == y.pageNum) return 0;
  54.         return -1;
  55.     }
  56.     ,onButtonBookmark: function(e) {
  57.         this.stopFlip();
  58.         if(this.currentTopBarButton == this.btnBookMark) {
  59.             this.hideTopBar();
  60.             return;
  61.         }
  62.         this.resetAndShowTopBar("bookmarks");
  63.         this.setTopTitle("BookmarkView");
  64.         this.currentTopBarButton = this.btnBookMark;
  65.         var bookmarks = RunTime.book.bookmarks;
  66.         var lv = !this.checkIfExistBookmark(this.leftPageNum) && this.leftPageNum != -1;
  67.         var rv = !this.checkIfExistBookmark(this.rightPageNum) && this.rightPageNum != -1;
  68.         bookmarks.sort($bind(this,this.f_sort));
  69.         var html = core.HtmlHelper.toBookmarksHtml(bookmarks,RunTime.singlePage,lv,rv);
  70.         if(RunTime.book.rightToLeft) html = core.HtmlHelper.toBookmarksHtml(bookmarks,RunTime.singlePage,rv,lv);
  71.         this.topBarContent.innerHTML = html;
  72.         this.HideBarOnPhone();
  73.         this.scaleTopBar();
  74.     }
  75.     ,resetHighlightButton: function() {
  76.         this.bStartHighLight = false;
  77.         this.btnMask.style.backgroundColor = "";
  78.     }
  79.     ,onAboutUsClick: function(e) {
  80.         if(this.topMenuBarBg.style.opacity == 0) return;
  81.         this.stopFlip();
  82.         if(this.currentTopBarButton == this.btnAboutUs) {
  83.             this.hideTopBar();
  84.             return;
  85.         }
  86.         this.resetAndShowTopBar("about");
  87.         this.currentTopBarButton = this.btnAboutUs;
  88.         this.setTopTitle("AboutUs");
  89.         if(RunTime.contentInfo != null) {
  90.             var html = core.HtmlHelper.toAboutHtml(RunTime.aboutInfo,RunTime.bookInfo);
  91.             this.topBarContent.innerHTML = html;
  92.             this.topBarContent.style.display = "block";
  93.         }
  94.         this.HideBarOnPhone();
  95.         this.scaleTopBar();
  96.     }
  97.     ,resetNoteButton: function() {
  98.         this.bStartNote = false;
  99.         this.btnNote.style.backgroundColor = "";
  100.     }
  101.     ,onButtonNoteClick: function(e) {
  102.         this.resetHighlightButton();
  103.         this.bStartNote = !this.bStartNote;
  104.         if(this.bStartNote) this.btnNote.style.backgroundColor = "#ff00ff"; else this.btnNote.style.backgroundColor = "";
  105.         this.HideBarOnPhone();
  106.     }
  107.     ,onButtonMaskClick: function(e) {
  108.         this.resetNoteButton();
  109.         this.bStartHighLight = !this.bStartHighLight;
  110.         if(this.bStartHighLight) this.btnMask.style.backgroundColor = "#ff00ff"; else this.btnMask.style.backgroundColor = "";
  111.         this.HideBarOnPhone();
  112.         this.scaleTopBar();
  113.     }
  114.     ,resetZoom: function() {
  115.         this.startZoomGesture = false;
  116.         this.startFingerDistance = 0;
  117.         this.page_offsetX = 0;
  118.         this.page_offsetY = 0;
  119.         this.last_moveX = 0;
  120.         this.last_moveY = 0;
  121.         this.init_moveX = 0;
  122.         this.init_moveY = 0;
  123.     }
  124.     ,updateVideoLayout: function() {
  125.         var list = this.findVideoHtmlDoms();
  126.         var videos = new Array();
  127.         var _g1 = 0, _g = list.length;
  128.         while(_g1 < _g) {
  129.             var i = _g1++;
  130.             var dom = list[i];
  131.             var _g3 = 0, _g2 = RunTime.book.videos.length;
  132.             while(_g3 < _g2) {
  133.                 var j = _g3++;
  134.                 var video = RunTime.book.videos[j];
  135.                 if(video.id == dom.id) video.updateLayout(dom);
  136.             }
  137.         }
  138.     }
  139.     ,findVideoHtmlDoms: function() {
  140.         var list = new Array();
  141.         if(this.cvsVideo != null) {
  142.             var c = this.cvsVideo.childNodes;
  143.             var _g1 = 0, _g = c.length;
  144.             while(_g1 < _g) {
  145.                 var i = _g1++;
  146.                 list.push(c[i]);
  147.             }
  148.         }
  149.         return list;
  150.     }
  151.     ,hackHtmlDom: function(item) {
  152.         item.onclick = $bind(this,this.forbidden);
  153.         item.ontouchstart = $bind(this,this.forbidden);
  154.         item.ontouchmove = $bind(this,this.forbidden);
  155.         item.ontouchend = $bind(this,this.forbidden);
  156.         item.ontouchcancel = $bind(this,this.forbidden);
  157.         item.gestureend = $bind(this,this.forbidden);
  158.         item.gesturestart = $bind(this,this.forbidden);
  159.         item.gesturechange = $bind(this,this.forbidden);
  160.         item.onscroll = $bind(this,this.forbidden);
  161.         item.onmousewheel = $bind(this,this.forbidden);
  162.         item.ondblclick = $bind(this,this.forbidden);
  163.     }
  164.     ,attachVideoTouchEvents: function() {
  165.         var list = this.findVideoHtmlDoms();
  166.         var _g1 = 0, _g = list.length;
  167.         while(_g1 < _g) {
  168.             var i = _g1++;
  169.             var item = list[i];
  170.         }
  171.     }
  172.     ,showPopupAudio: function(item) {
  173.         item.url = item.destination;
  174.         var pageNum = item.pageNum;
  175.         var audio = new core.AudioInfo();
  176.         audio.pageNum = pageNum;
  177.         audio.url = item.destination;
  178.         this.cvsLeftPageBgAudio.innerHTML = "";
  179.         this.cvsLeftPageBgAudio.innerHTML = core.HtmlHelper.toPopupPageAudiosHtml(audio,true);
  180.         var item1 = js.Lib.document.getElementById("cvsLeftPageBgAudio").getElementsByTagName("audio")[0];
  181.         item1.play();
  182.     }
  183.     ,loadCtxNotes: function() {
  184.         var notes = new Array();
  185.         if(RunTime.book != null && RunTime.book.notes != null) {
  186.             var current = 0;
  187.             if(this.currentPageNum != null) current = this.currentPageNum;
  188.             var _g1 = 0, _g = RunTime.book.notes.length;
  189.             while(_g1 < _g) {
  190.                 var i = _g1++;
  191.                 var item = RunTime.book.notes[i];
  192.                 if(item.pageNum == current) notes.push(item);
  193.             }
  194.         }
  195.         this.bookContext.notes = notes;
  196.     }
  197.     ,loadCtxHighLights: function() {
  198.         var highlights = new Array();
  199.         if(RunTime.book != null && RunTime.book.highlights != null) {
  200.             var current = 0;
  201.             if(this.currentPageNum != null) current = this.currentPageNum;
  202.             var _g1 = 0, _g = RunTime.book.highlights.length;
  203.             while(_g1 < _g) {
  204.                 var i = _g1++;
  205.                 var item = RunTime.book.highlights[i];
  206.                 if(item.pageNum == current) highlights.push(item);
  207.             }
  208.         }
  209.         this.bookContext.highlights = highlights;
  210.     }
  211.     ,loadCurrentBookmark: function() {
  212.         var bms = new Array();
  213.         if(RunTime.book != null && RunTime.book.bookmarks != null) {
  214.             var _g1 = 0, _g = RunTime.book.bookmarks.length;
  215.             while(_g1 < _g) {
  216.                 var i = _g1++;
  217.                 var bm = RunTime.book.bookmarks[i];
  218.                 if(bm.pageNum == this.currentPageNum + 1) bms.push(bm);
  219.             }
  220.         }
  221.         this.bookContext.bookmarks = bms;
  222.     }
  223.     ,loadCtxButtons: function() {
  224.         var buttons = new Array();
  225.         if(RunTime.book != null && RunTime.book.buttons != null) {
  226.             var current = 0;
  227.             if(this.currentPageNum != null) current = this.currentPageNum;
  228.             var _g1 = 0, _g = RunTime.book.buttons.length;
  229.             while(_g1 < _g) {
  230.                 var i = _g1++;
  231.                 var item = RunTime.book.buttons[i];
  232.                 if(item.pageNum == current) buttons.push(item); else if(item.layer == "foreground") buttons.push(item);
  233.             }
  234.         }
  235.         this.bookContext.buttons = buttons;
  236.     }
  237.     ,updateAudios: function() {
  238.         var audios = this.getCurrentPageAudios();
  239.         if(audios.left != null || audios.right != null) {
  240.             this.cvsLeftPageBgAudio.innerHTML = core.HtmlHelper.toPopupPageAudiosHtml(audios.left,true);
  241.             this.cvsRightPageBgAudio.innerHTML = core.HtmlHelper.toPopupPageAudiosHtml(audios.right,false);
  242.         } else RunTime.clearBgAudio();
  243.     }
  244.     ,renderVideo: function(item) {
  245.         this.cvsVideo.innerHTML += core.HtmlHelper.toVideoHtml(item);
  246.     }
  247.     ,updateVideos: function() {
  248.         this.loadCtxVideos();
  249.         var videos = this.bookContext.videos;
  250.         if(videos != null) {
  251.             var _g1 = 0, _g = videos.length;
  252.             while(_g1 < _g) {
  253.                 var i = _g1++;
  254.                 var item = videos[i];
  255.                 this.renderVideo(item);
  256.             }
  257.         }
  258.         this.attachVideoTouchEvents();
  259.     }
  260.     ,clearVideos: function() {
  261.         this.cvsVideo.innerHTML = "";
  262.     }
  263.     ,renderSlideshow: function(item) {
  264.         this.cvsSlideshow.innerHTML += core.HtmlHelper.toSlideshow(item);
  265.     }
  266.     ,updateSlideshow: function() {
  267.         var slides = this.bookContext.slideshow;
  268.         if(slides != null) {
  269.             var _g1 = 0, _g = slides.length;
  270.             while(_g1 < _g) {
  271.                 var i = _g1++;
  272.                 var item = slides[i];
  273.                 this.renderSlideshow(item);
  274.                 item.startTweener();
  275.             }
  276.         }
  277.     }
  278.     ,clearSlideshow: function() {
  279.         this.cvsSlideshow.innerHTML = "";
  280.         var slides = this.bookContext.slideshow;
  281.         if(slides != null) {
  282.             var _g1 = 0, _g = slides.length;
  283.             while(_g1 < _g) {
  284.                 var i = _g1++;
  285.                 var item = slides[i];
  286.                 item.stopTweener();
  287.             }
  288.         }
  289.     }
  290.     ,getElementTop: function(e) {
  291.         var offset = e.offsetTop;
  292.         if(e.offsetParent != null) offset += this.getElementTop(e.offsetParent);
  293.         return offset;
  294.     }
  295.     ,showBottomBar: function(e) {
  296.         var cid = haxe.Timer.delay($bind(this,this.cPage),500);
  297.         this.topMenuBarBg.style.cssText = "opacity:" + RunTime.bottomBarAlpha + ";  -webkit-transition: 0.3s ease-out; ";
  298.         this.bottomBar.style.cssText = "opacity:" + 1 + "; -webkit-transition: 0.0s ease-out; ";
  299.         this.bottomBar.style.display = "inline-block";
  300.         this.bottomBarBg.style.opacity = RunTime.bottomBarAlpha;
  301.         this.topMenuBar.style.display = "inline-block";
  302.         this.bCanGestureZoom = false;
  303.         RunTime.saveBottomBarVisible(true);
  304.         this.bShowBottomBar = true;
  305.         var t = js.Lib.window.navigator.userAgent;
  306.         if(t.indexOf("CPU iPhone OS ") != -1) {
  307.             var iosVar = HxOverrides.substr(t,t.indexOf("CPU iPhone OS ") + 14,1);
  308.             if(iosVar == "7") {
  309.                 if(RunTime.clientWidth >= 480) this.bottomBar.style.top = "170px";
  310.             }
  311.         }
  312.         var t1 = js.Lib.window.navigator.userAgent;
  313.         if(t1.indexOf("CPU iPhone OS ") != -1) {
  314.             var iosVar = HxOverrides.substr(t1,t1.indexOf("CPU iPhone OS ") + 14,1);
  315.             if(iosVar == "7") {
  316.                 if(RunTime.clientWidth >= 480) {
  317.                     var tid = new haxe.Timer(300);
  318.                     tid.run = function() {
  319.                         if(js.Lib.document.body.scrollTop != 0) js.Lib.document.body.scrollTop = 0;
  320.                     };
  321.                 }
  322.             }
  323.         }
  324.     }
  325.     ,delayRender: function() {
  326.         RunTime.showCvs();
  327.         this.bookContext.render();
  328.     }
  329.     ,getCurrentBBV: function() {
  330.         if(this.bottomBar.style.display == "inline-block") return "1"; else return "0";
  331.     }
  332.     ,hideBottomBar: function(e,animate,atOnce) {
  333.         if(atOnce == null) atOnce = false;
  334.         if(animate == null) animate = true;
  335.         if(e != null) {
  336.             var t = e.target;
  337.             if(t == this.btnAutoFlip || t == this.btnContents || t == this.btnFirstPage || t == this.btnLastPage || t == this.btnNextPage || t == this.btnPrevPage || t == this.btnSearch || t == this.btnThumbs || t == this.tbPage || t == this.imgLogo) return;
  338.         }
  339.         if(atOnce) {
  340.             this.topMenuBarBg.style.cssText = "opacity:0 ; ";
  341.             this.bottomBar.style.cssText = "opacity: 0 ;";
  342.         } else {
  343.             this.topMenuBarBg.style.cssText = "opacity:0 ; -webkit-transition: 0.3s ease-out; ";
  344.             this.bottomBar.style.cssText = "opacity: 0 ; -webkit-transition: 0.0s ease-out; ";
  345.             this.bCanGestureZoom = false;
  346.         }
  347.         if(e != null) this.bShowBottomBar = false;
  348.         RunTime.saveBottomBarVisible(false);
  349.     }
  350.     ,getCurrentPageAudios: function() {
  351.         var audios = RunTime.book.audios;
  352.         var match = { left : null, right : null};
  353.         var pg = this.getCurrentPageNum();
  354.         var _g1 = 0, _g = audios.length;
  355.         while(_g1 < _g) {
  356.             var i = _g1++;
  357.             var item = audios[i];
  358.             if(item.pageNum == pg) match.left = item;
  359.         }
  360.         return match;
  361.     }
  362.     ,getFullText: function(pages) {
  363.         var result = "";
  364.         var pg = this.getCurrentPageNum();
  365.         var _g1 = 0, _g = pages.length;
  366.         while(_g1 < _g) {
  367.             var i = _g1++;
  368.             var item = pages[i];
  369.             if(item.num == pg) {
  370.                 result += "<br />";
  371.                 result += "<br />";
  372.                 result += "==== Page " + Std.string(pg + 1) + " ====";
  373.                 result += "<br />";
  374.                 result += "<br />";
  375.                 result += item.content;
  376.                 result += "<br />";
  377.                 result += "<br />";
  378.                 break;
  379.             }
  380.         }
  381.         result = StringTools.replace(result,"\n","<br />");
  382.         return result;
  383.     }
  384.     ,updateFullTextCore: function(pages) {
  385.         var result = this.getFullText(pages);
  386.         this.topFullTextContent.innerHTML = result;
  387.         this.topFullTextContent.scrollTop = 0;
  388.     }
  389.     ,updateFullText: function() {
  390.         RunTime.invokePageContentsAction($bind(this,this.updateFullTextCore));
  391.     }
  392.     ,showTxtCore: function(pages) {
  393.         var result = this.getFullText(pages);
  394.         this.resetAndShowTopBar("text");
  395.         this.setTopTitle("FullText");
  396.         this.currentTopBarButton = this.btnShowTxt;
  397.         this.topFullTextContent.innerHTML = result;
  398.         this.topFullTextContent.scrollTop = 0;
  399.     }
  400.     ,onShowTxtClick: function(e) {
  401.         this.stopFlip();
  402.         if(this.currentTopBarButton == this.btnShowTxt) {
  403.             this.hideTopBar();
  404.             return;
  405.         }
  406.         this.HideBarOnPhone();
  407.         RunTime.invokePageContentsAction($bind(this,this.showTxtCore));
  408.         this.scaleTopBar();
  409.     }
  410.     ,onZoomClick: function(e) {
  411.         this.zoomAt(null,null);
  412.     }
  413.     ,onAutoFlipClick: function(e) {
  414.         if(this.zoomLeftPage.src != "") {
  415.             this.zoomLeftPage.src = "";
  416.             this.zoomLeftPage.style.display = "none";
  417.         }
  418.         if(this.zoomRightPage.src != "") {
  419.             this.zoomRightPage.src = "";
  420.             this.zoomRightPage.style.display = "none";
  421.         }
  422.         this.stopFlip(false);
  423.         this.hideTopBar();
  424.         if(this.isAutoFliping == true) {
  425.             this.isAutoFliping = false;
  426.             this.btnAutoFlip.style.opacity = 1;
  427.         } else {
  428.             this.isAutoFliping = true;
  429.             this.btnAutoFlip.style.opacity = RunTime.autoflipButtonUnselectedAlpha;
  430.             this.flipTweener = new core.Tweener();
  431.             var self = this;
  432.             var countOfClip = 50 * RunTime.book.autoFlipSecond;
  433.             this.flipTweener.onChange = function(count) {
  434.                 if(count % countOfClip != 0) return;
  435.                 if(self.isAutoFliping == false) return;
  436.                 if(self.canTurnRight() == true) {
  437.                     if(RunTime.book.rightToLeft) self.turnPage(-1); else self.turnPage(1);
  438.                 } else self.stopFlip();
  439.             };
  440.             this.flipTweener.start(1000000);
  441.         }
  442.         this.scaleTopBar();
  443.     }
  444.     ,canTurnRight: function() {
  445.         var num = this.getCurrentPageNum();
  446.         return num < RunTime.book.pages.length - 1;
  447.     }
  448.     ,preloadPages: function(num) {
  449.         if(RunTime.enablePreload == false) return;
  450.         RunTime.book.preloadPages(num);
  451.     }
  452.     ,stopFlip: function(resetFlipFlag) {
  453.         if(resetFlipFlag == null) resetFlipFlag = true;
  454.         if(this.flipTweener != null) {
  455.             this.flipTweener.onChange = null;
  456.             this.flipTweener.stop();
  457.             this.flipTweener = null;
  458.         }
  459.         if(resetFlipFlag == true) {
  460.             this.isAutoFliping = false;
  461.             this.btnAutoFlip.style.opacity = 1;
  462.         }
  463.     }
  464.     ,checkIfExistBookmark: function(pageNum) {
  465.         var i = 0;
  466.         var _g1 = 0, _g = RunTime.book.bookmarks.length;
  467.         while(_g1 < _g) {
  468.             var i1 = _g1++;
  469.             if(pageNum == RunTime.book.bookmarks[i1].pageNum) return true;
  470.         }
  471.         return false;
  472.     }
  473.     ,addBookmark: function(layout,text) {
  474.         if(layout == null) layout = 0;
  475.         var bookmark = new core.Bookmark();
  476.         if(layout == -1) {
  477.             if(RunTime.book.rightToLeft) bookmark.pageNum = this.rightPageNum; else bookmark.pageNum = this.leftPageNum;
  478.         } else if(layout == 1) {
  479.             if(RunTime.book.rightToLeft) bookmark.pageNum = this.leftPageNum; else bookmark.pageNum = this.rightPageNum;
  480.         } else if(layout == 0) bookmark.pageNum = this.getCurrentPageNum() + 1;
  481.         bookmark.text = text;
  482.         bookmark.save();
  483.         RunTime.book.bookmarks.push(bookmark.clone());
  484.         var bookmarks = RunTime.book.bookmarks;
  485.         var lv = !this.checkIfExistBookmark(this.leftPageNum) && this.leftPageNum != -1;
  486.         var rv = !this.checkIfExistBookmark(this.rightPageNum) && this.rightPageNum != -1;
  487.         var html = core.HtmlHelper.toBookmarksHtml(bookmarks,RunTime.singlePage,lv,rv);
  488.         if(RunTime.book.rightToLeft) html = core.HtmlHelper.toBookmarksHtml(bookmarks,RunTime.singlePage,rv,lv);
  489.         this.topBarContent.innerHTML = html;
  490.     }
  491.     ,removeBookmark: function(pageNum) {
  492.         var i = 0;
  493.         var tmp = new Array();
  494.         var currentBookmark = null;
  495.         var _g1 = 0, _g = RunTime.book.bookmarks.length;
  496.         while(_g1 < _g) {
  497.             var i1 = _g1++;
  498.             haxe.Log.trace(RunTime.book.bookmarks[i1].pageNum,{ fileName : "FlipBook.hx", lineNumber : 1738, className : "FlipBook", methodName : "removeBookmark"});
  499.             if(pageNum + 1 != RunTime.book.bookmarks[i1].pageNum) tmp.push(RunTime.book.bookmarks[i1]); else currentBookmark = RunTime.book.bookmarks[i1];
  500.         }
  501.         if(currentBookmark != null) currentBookmark.remove();
  502.         RunTime.book.bookmarks = tmp;
  503.         var bookmarks = RunTime.book.bookmarks;
  504.         var lv = !this.checkIfExistBookmark(this.leftPageNum) && this.leftPageNum != -1;
  505.         var rv = !this.checkIfExistBookmark(this.rightPageNum) && this.rightPageNum != -1;
  506.         var html = core.HtmlHelper.toBookmarksHtml(bookmarks,RunTime.singlePage,lv,rv);
  507.         if(RunTime.book.rightToLeft) html = core.HtmlHelper.toBookmarksHtml(bookmarks,RunTime.singlePage,rv,lv);
  508.         this.topBarContent.innerHTML = html;
  509.     }
  510.     ,getCurrentPageNum: function() {
  511.         var num = 0;
  512.         if(this.currentPageNum != null) num = this.currentPageNum;
  513.         return num;
  514.     }
  515.     ,searchInPages: function(pages) {
  516.         var results = [];
  517.         var _g1 = 0, _g = pages.length;
  518.         while(_g1 < _g) {
  519.             var i = _g1++;
  520.             var item = pages[i];
  521.             if(item.content == null || item.content == "") continue;
  522.             if(item.contentLowerCase == null) item.contentLowerCase = item.content.toLowerCase();
  523.             var posList = orc.utils.Util.searchPos(item.contentLowerCase,this.searchWord);
  524.             results = results.concat(orc.utils.Util.createSearchResults(item.content,this.searchWord,posList,Std.parseInt(item.id)));
  525.         }
  526.         return results;
  527.     }
  528.     ,searchCore: function(pages) {
  529.         if(this.searchWord == "") return;
  530.         var list = this.searchInPages(pages);
  531.         var dom = this.topBarContent;
  532.         var resultsDom = dom.getElementsByTagName("div")[1];
  533.         if(list == null || list.length == 0) resultsDom.innerHTML = "0 " + L.s("SearchResults","Search Results") + "."; else resultsDom.innerHTML = core.HtmlHelper.toSearchResultHtml(list);
  534.     }
  535.     ,getSearchInputDom: function() {
  536.         var dom = this.topBarContent;
  537.         var inputDom = dom.getElementsByTagName("input")[0];
  538.         return inputDom;
  539.     }
  540.     ,unlockPage: function() {
  541.         var dom = this.cvsOthers;
  542.         var inputDom = dom.getElementsByTagName("input")[0];
  543.         var word = inputDom.value;
  544.         word = StringTools.trim(word);
  545.         RunTime.tryUnlock(word);
  546.     }
  547.     ,inputPwd: function() {
  548.         var dom = this.cvsOthers;
  549.         var inputDom = dom.getElementsByTagName("input")[0];
  550.         var word = inputDom.value;
  551.         word = StringTools.trim(word);
  552.         RunTime.tryPwd(word);
  553.     }
  554.     ,search: function() {
  555.         var input = this.getSearchInputDom();
  556.         var word = input.value;
  557.         word = StringTools.trim(word);
  558.         if(word == "") return;
  559.         this.searchWord = word.toLowerCase();
  560.         RunTime.requestSearch($bind(this,this.searchCore));
  561.         RunTime.logSearch(this.searchWord);
  562.     }
  563.     ,onTbPageFocus: function(e) {
  564.         this.stopFlip();
  565.         var obj = this.tbPage;
  566.         obj.value = "";
  567.     }
  568.     ,onSearchClick: function(e) {
  569.         this.stopFlip();
  570.         if(this.currentTopBarButton == this.btnSearch) {
  571.             this.hideTopBar();
  572.             return;
  573.         }
  574.         this.resetAndShowTopBar("search");
  575.         this.setTopTitle("Search");
  576.         this.currentTopBarButton = this.btnSearch;
  577.         var html = core.HtmlHelper.toSearchHtml();
  578.         this.topBarContent.innerHTML = html;
  579.         this.HideBarOnPhone();
  580.         this.scaleTopBar();
  581.     }
  582.     ,scaleTopBar: function() {
  583.         if(RunTime.clientWidth < 480) {
  584.             this.topBar.style.left = "10px";
  585.             this.topBar.style.width = "300px";
  586.         }
  587.     }
  588.     ,onThumbsClick: function(e) {
  589.         this.stopFlip();
  590.         if(this.currentTopBarButton == this.btnThumbs) {
  591.             this.hideTopBar();
  592.             return;
  593.         }
  594.         this.resetAndShowTopBar("thumbs");
  595.         this.setTopTitle("ThumbnailView");
  596.         this.currentTopBarButton = this.btnThumbs;
  597.         var html = core.HtmlHelper.toThumbsHtml(RunTime.book.pages);
  598.         this.topBarContent.innerHTML = html;
  599.         this.HideBarOnPhone();
  600.         this.scaleTopBar();
  601.     }
  602.     ,HideBarOnPhone: function() {
  603.         var hide = false;
  604.         if(RunTime.clientWidth < 600) hide = true;
  605.         if(js.Lib.window.navigator.userAgent.indexOf("iPhone") != -1) hide = true;
  606.         if(hide) this.hideBottomBar();
  607.     }
  608.     ,onContentsClick: function(e) {
  609.         this.stopFlip();
  610.         if(this.currentTopBarButton == this.btnContents) {
  611.             this.hideTopBar();
  612.             return;
  613.         }
  614.         this.resetAndShowTopBar("toc");
  615.         this.currentTopBarButton = this.btnContents;
  616.         this.setTopTitle("TableOfContents");
  617.         if(RunTime.contentInfo != null) {
  618.             var html = core.HtmlHelper.toContentsHtml(RunTime.contentInfo);
  619.             this.topBarContent.innerHTML = html;
  620.         }
  621.         this.HideBarOnPhone();
  622.         this.scaleTopBar();
  623.     }
  624.     ,onSnsClick: function(e) {
  625.         this.stopFlip();
  626.         if(this.currentTopBarButton == this.btnSns) {
  627.             this.hideTopBar();
  628.             return;
  629.         }
  630.         this.resetAndShowTopBar("sns");
  631.         this.currentTopBarButton = this.btnSns;
  632.         this.setTopTitle("ShareOnSocialNetwork");
  633.         if(RunTime.contentInfo != null) {
  634.             var html = core.HtmlHelper.toSnsHtml(RunTime.shareInfo);
  635.             this.topBarContent.innerHTML = html;
  636.         }
  637.         this.HideBarOnPhone();
  638.         this.scaleTopBar();
  639.     }
  640.     ,onEmailClick: function(e) {
  641.         this.stopFlip();
  642.         if(this.currentTopBarButton == this.btnEmail) {
  643.             this.hideTopBar();
  644.             return;
  645.         }
  646.         this.resetAndShowTopBar("email");
  647.         this.currentTopBarButton = this.btnEmail;
  648.         this.setTopTitle("ShareThisFlipBook");
  649.         if(RunTime.contentInfo != null) {
  650.             var html = core.HtmlHelper.toEmailHtml();
  651.             this.topBarContent.innerHTML = html;
  652.         }
  653.         this.HideBarOnPhone();
  654.         this.scaleTopBar();
  655.     }
  656.     ,focusSearchInput: function() {
  657.         var t = new core.Tweener();
  658.         var self = this;
  659.         t.start(10);
  660.         t.onChange = function(count) {
  661.             if(count == 10) {
  662.                 var input = self.getSearchInputDom();
  663.                 input.focus();
  664.             }
  665.         };
  666.     }
  667.     ,resetAndShowTopBar: function(type) {
  668.         if(type == null) type = "";
  669.         this.resetNoteButton();
  670.         this.resetHighlightButton();
  671.         var dom = this.topBar;
  672.         dom.style.height = "0px";
  673.         var step = 30;
  674.         var height = 300;
  675.         this.setVisible(this.topBarContent,false);
  676.         this.setVisible(this.topFullTextContent,false);
  677.         if(type == "text") {
  678.             HtmlDomHelper.setTopBarMaxSize(dom);
  679.             HtmlDomHelper.setTopFullTextContentMaxSize(this.topFullTextContent);
  680.             height = RunTime.clientHeight - 45 | 0;
  681.             step = step / 10 | 0;
  682.         } else HtmlDomHelper.setTopBarDefaultSize(dom);
  683.         var t = new core.Tweener();
  684.         var self = this;
  685.         self.setVisible(self.topBarContent,false);
  686.         t.start(10);
  687.         t.onChange = function(count) {
  688.             if(count < 10) dom.style.height = Std.string(count * step) + "px"; else {
  689.                 dom.style.height = Std.string(height) + "px";
  690.                 if(type == "text") self.setVisible(self.topFullTextContent,true); else self.setVisible(self.topBarContent,true);
  691.                 if(type == "search") self.focusSearchInput();
  692.             }
  693.         };
  694.         this.setVisible(this.topBar,true);
  695.         this.topBarContent.innerHTML = "";
  696.     }
  697.     ,setTopTitle: function(val) {
  698.         var dom = js.Lib.document.getElementById("topTitle");
  699.         dom.innerHTML = L.s(val);
  700.     }
  701.     ,setVisible: function(dom,val) {
  702.         if(val == true) dom.style.display = "inline"; else dom.style.display = "none";
  703.     }
  704.     ,hideTopBar: function() {
  705.         this.setVisible(this.topBar,false);
  706.         this.currentTopBarButton = null;
  707.     }
  708.     ,loadCtxVideos: function() {
  709.         var videos = new Array();
  710.         if(RunTime.book != null && RunTime.book.videos != null) {
  711.             var current = 0;
  712.             if(this.currentPageNum != null) current = this.currentPageNum;
  713.             var _g1 = 0, _g = RunTime.book.videos.length;
  714.             while(_g1 < _g) {
  715.                 var i = _g1++;
  716.                 var item = RunTime.book.videos[i];
  717.                 if(item.pageNum == current) videos.push(item);
  718.             }
  719.         }
  720.         this.bookContext.videos = videos;
  721.     }
  722.     ,loadCtxHotlinks: function() {
  723.         var links = new Array();
  724.         if(RunTime.book != null && RunTime.book.hotlinks != null) {
  725.             var current = 0;
  726.             if(this.currentPageNum != null) current = this.currentPageNum;
  727.             var _g1 = 0, _g = RunTime.book.hotlinks.length;
  728.             while(_g1 < _g) {
  729.                 var i = _g1++;
  730.                 var item = RunTime.book.hotlinks[i];
  731.                 if(item.pageNum == current) links.push(item);
  732.             }
  733.         }
  734.         this.bookContext.hotlinks = links;
  735.     }
  736.     ,loadCtxSlideshow: function() {
  737.         var slides = new Array();
  738.         if(RunTime.book != null && RunTime.book.slideshows != null) {
  739.             var current = 0;
  740.             if(this.currentPageNum != null) current = this.currentPageNum;
  741.             var _g1 = 0, _g = RunTime.book.slideshows.length;
  742.             while(_g1 < _g) {
  743.                 var i = _g1++;
  744.                 var item = RunTime.book.slideshows[i];
  745.                 if(item.pageNum == current) slides.push(item);
  746.             }
  747.         }
  748.         this.bookContext.slideshow = slides;
  749.         this.updateSlideshow();
  750.     }
  751.     ,clearCtxNote: function() {
  752.         this.bookContext.notes = null;
  753.     }
  754.     ,clearCtxHighLight: function() {
  755.         this.bookContext.highlights = null;
  756.     }
  757.     ,clearCtxButtons: function() {
  758.         this.bookContext.buttons = null;
  759.     }
  760.     ,clearCtxHotlinks: function() {
  761.         this.bookContext.hotlinks = null;
  762.     }
  763.     ,onTopBarTouchMove: function(e) {
  764.         e.preventDefault();
  765.         var obj = e;
  766.         var touch = obj.touches.item(0);
  767.         var offset = this.touchTopBarY - touch.pageY;
  768.         this.topBarContent.scrollTop += Math.round(offset) | 0;
  769.         this.topFullTextContent.scrollTop += Math.round(offset) | 0;
  770.     }
  771.     ,onTopBarTouchEnd: function(e) {
  772.         this.touchTopBarActive = false;
  773.     }
  774.     ,onTopBarTouchStart: function(e) {
  775.         this.touchTopBarActive = true;
  776.         var obj = e;
  777.         var touch = obj.touches.item(0);
  778.         this.touchTopBarY = touch.pageY;
  779.     }
  780.     ,onGestureEnd: function(e) {
  781.         e.stopPropagation();
  782.     }
  783.     ,onGestureChange: function(e) {
  784.         e.stopPropagation();
  785.     }
  786.     ,onGestureStart: function(e) {
  787.         e.stopPropagation();
  788.     }
  789.     ,move: function(offsetX,offsetY) {
  790.         this.bookContext.offsetX += offsetX;
  791.         this.bookContext.offsetY += offsetY;
  792.         this.updateVideoLayout();
  793.         this.bookContext.render();
  794.     }
  795.     ,onTouchMove: function(e) {
  796.         if(RunTime.isPopupModal()) return;
  797.         if(this.bStartHighLight) {
  798.             e.preventDefault();
  799.             var obj = e;
  800.             var touch = obj.touches[0];
  801.             this.gestureLastX = touch.pageX;
  802.             this.gestureLastY = touch.pageY;
  803.             if(Math.abs(this.gestureLastX - this.currentHighLight.tx) <= 10 || Math.abs(this.gestureLastY - this.currentHighLight.ty) <= 10) return;
  804.             this.currentHighLight.twidth = this.gestureLastX - this.currentHighLight.tx;
  805.             this.currentHighLight.theight = this.gestureLastY - this.currentHighLight.ty;
  806.             var h = js.Lib.window.document.body.clientHeight;
  807.             this.getHighLightContext().clearRect(0,0,js.Lib.window.document.body.clientWidth,h);
  808.             this.bookContext.render();
  809.             this.currentHighLight.draw(this.getHighLightContext());
  810.             return;
  811.         }
  812.         if(this.bStartNote) {
  813.             e.preventDefault();
  814.             var obj = e;
  815.             var touch = obj.touches[0];
  816.             this.gestureLastX = touch.pageX;
  817.             this.gestureLastY = touch.pageY;
  818.             this.currentNote.twidth = 32;
  819.             this.currentNote.theight = 32;
  820.             var h = js.Lib.window.document.body.clientHeight;
  821.             if(h == 276 || h == 320) h = 208;
  822.             this.getNoteContext().clearRect(0,0,js.Lib.window.document.body.clientWidth,h);
  823.             this.bookContext.render();
  824.             this.currentNote.draw(this.getNoteContext());
  825.             return;
  826.         }
  827.         var obj = e;
  828.         var touch = obj.touches[0];
  829.         var touch2 = obj.touches[1];
  830.         var date = new Date();
  831.         var offsetX = touch.clientX - this.touchStartX;
  832.         var offsetY = touch.clientY - this.touchStartY;
  833.         if(!this.checkCanZoom() && obj.touches.length == 2) obj.preventDefault();
  834.         if(obj.touches.length == 2 && this.checkCanZoom()) {
  835.             this.zoomAt(touch,touch2);
  836.             return;
  837.         }
  838.         if(obj.touches.length == 1 && Math.abs(js.Lib.window.innerWidth - RunTime.clientWidth) < 10) {
  839.             this.zoomLeftPage.src = "";
  840.             this.zoomLeftPage.style.display = "none";
  841.             this.zoomRightPage.src = "";
  842.             this.zoomRightPage.style.display = "none";
  843.             if(offsetX > 0) {
  844.                 this.turnToPrevPage(null);
  845.                 this.touchActive = false;
  846.                 this.bFlipping = true;
  847.             } else if(offsetX < 0) {
  848.                 this.turnToNextPage(null);
  849.                 this.touchActive = false;
  850.                 this.bFlipping = true;
  851.             }
  852.             this.zoomAt(null,null);
  853.             obj.preventDefault();
  854.         }
  855.         this.lastTouchX = touch.clientX;
  856.         this.lastTouchY = touch.clientY;
  857.     }
  858.     ,checkCanZoom: function() {
  859.         var num = 0;
  860.         if(this.currentPageNum != null) num = this.currentPageNum;
  861.         var page = RunTime.getPage(num);
  862.         return page.canZoom;
  863.     }
  864.     ,onReadyTouchEnd: function(e) {
  865.     }
  866.     ,onTouchEnd: function(e) {
  867.         this.onReadyTouchEnd(e);
  868.         if(this.bStartHighLight && this.gestureLastX != -1 && this.gestureLastY != -1) {
  869.             var obj = e;
  870.             e.preventDefault();
  871.             if(this.gestureLastX < this.currentHighLight.tx) {
  872.                 this.currentHighLight.tx = this.gestureLastX;
  873.                 this.currentHighLight.twidth = Math.abs(this.currentHighLight.twidth);
  874.             }
  875.             if(this.gestureLastY < this.currentHighLight.ty) {
  876.                 this.currentHighLight.ty = this.gestureLastY;
  877.                 this.currentHighLight.theight = Math.abs(this.currentHighLight.theight);
  878.             }
  879.             this.currentHighLight.save();
  880.             RunTime.book.highlights.push(this.currentHighLight.clone());
  881.             this.loadCtxHighLights();
  882.             this.bookContext.render();
  883.             this.gestureLastX = -1;
  884.             this.gestureLastY = -1;
  885.             this.currentHighLight.tx = 0;
  886.             this.currentHighLight.ty = 0;
  887.             this.currentHighLight.twidth = 0;
  888.             this.currentHighLight.theight = 0;
  889.             this.currentHighLight.tpageNum = this.getCurrentPageNum();
  890.             this.currentHighLight = null;
  891.             this.onButtonMaskClick(null);
  892.             return;
  893.         }
  894.         if(this.bStartNote && this.gestureLastX != -1 && this.gestureLastY != -1) {
  895.             var obj = e;
  896.             e.preventDefault();
  897.             this.currentNote.twidth = 32;
  898.             this.currentNote.theight = 32;
  899.             this.currentNote.save();
  900.             var saveObj = this.currentNote.clone();
  901.             RunTime.book.notes.push(saveObj);
  902.             this.loadCtxNotes();
  903.             this.bookContext.render();
  904.             this.gestureLastX = -1;
  905.             this.gestureLastY = -1;
  906.             this.currentNote.tx = 0;
  907.             this.currentNote.ty = 0;
  908.             this.currentNote.twidth = 0;
  909.             this.currentNote.theight = 0;
  910.             this.currentNote.tpageNum = this.getCurrentPageNum();
  911.             this.onButtonNoteClick(null);
  912.             RunTime.currentNote = saveObj;
  913.             RunTime.currentNote.click();
  914.             return;
  915.         }
  916.         this.totalDistance += this.totalLast;
  917.         if(this.startZoomGesture) {
  918.             if(Math.abs(js.Lib.window.innerWidth - RunTime.clientWidth) >= 10) this.hideBottomBar(); else if(this.bShowBottomBar) this.showBottomBar(null);
  919.             RunTime.hideCvs();
  920.         }
  921.         if(this.totalDistance <= 0) {
  922.         }
  923.         this.bFlipping = false;
  924.         e.stopPropagation();
  925.         this.touchActive = false;
  926.         this.startZoomGesture = false;
  927.         this.startFingerDistance = 0;
  928.         return;
  929.     }
  930.     ,getFullUrl: function() {
  931.         return RunTime.urlIndex + "?page=" + Std.string(this.currentPageNum) + "&bbv=" + this.getCurrentBBV() + "&pcode=" + RunTime.pcode;
  932.     }
  933.     ,resizeContainer: function(w,h,l,t) {
  934.     }
  935.     ,getDistance: function(touch1,touch2) {
  936.         var x1 = touch1.clientX;
  937.         var x2 = touch2.clientX;
  938.         var y1 = touch1.clientY;
  939.         var y2 = touch2.clientY;
  940.         return Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));
  941.     }
  942.     ,zoomIn: function(page,point0,point1) {
  943.         if(page == null) return;
  944.         if(!page.locked) this.zoomLeftPage.src = page.getBigPageUrl(); else {
  945.         }
  946.         this.zoomLeftPage.style.display = "inline";
  947.     }
  948.     ,zoomOut: function() {
  949.         if(this.bShowBottomBar) this.showBottomBar(null);
  950.     }
  951.     ,zoomAt: function(point0,point1) {
  952.         var num = 0;
  953.         if(this.currentPageNum != null) num = this.currentPageNum;
  954.         var page = RunTime.getPage(num);
  955.         if(point0 == null || point1 == null) this.zoomOut(); else this.zoomIn(page,point0,point1);
  956.     }
  957.     ,fillImg: function(urlPage) {
  958.         this.zoomLeftPage.src = urlPage;
  959.     }
  960.     ,onTouchStart: function(e) {
  961.         if(this.zoomStatus == core.ZoomStatus.zoomed) this.hideBottomBar();
  962.         var obj = e;
  963.         var touch = obj.touches[0];
  964.         if(this.onHighLightClick(touch.pageX,touch.pageY)) return;
  965.         if(this.onNoteClick(touch.pageX,touch.pageY)) return;
  966.         if(this.bStartHighLight) {
  967.             this.currentHighLight = new core.HighLight();
  968.             this.currentHighLight.tx = touch.pageX;
  969.             this.currentHighLight.ty = touch.pageY;
  970.             if(RunTime.singlePage) this.currentHighLight.tpageNum = this.getCurrentPageNum(); else if(RunTime.book.rightToLeft) {
  971.                 if(this.currentHighLight.tx > RunTime.clientWidth / 2) this.currentHighLight.tpageNum = this.leftPageNum - 1; else this.currentHighLight.tpageNum = this.rightPageNum - 1;
  972.             } else if(this.currentHighLight.tx > RunTime.clientWidth / 2) this.currentHighLight.tpageNum = this.rightPageNum - 1; else this.currentHighLight.tpageNum = this.leftPageNum - 1;
  973.             return;
  974.         }
  975.         if(this.bStartNote) {
  976.             this.currentNote = new core.NoteIcon();
  977.             this.currentNote.tx = touch.pageX;
  978.             this.currentNote.ty = touch.pageY;
  979.             this.gestureLastX = touch.pageX;
  980.             this.gestureLastY = touch.pageY;
  981.             if(RunTime.singlePage) this.currentNote.tpageNum = this.getCurrentPageNum(); else if(RunTime.book.rightToLeft) {
  982.                 if(this.currentNote.tx > RunTime.clientWidth / 2) this.currentNote.tpageNum = this.leftPageNum - 1; else this.currentNote.tpageNum = this.rightPageNum - 1;
  983.             } else if(this.currentNote.tx > RunTime.clientWidth / 2) this.currentNote.tpageNum = this.rightPageNum - 1; else this.currentNote.tpageNum = this.leftPageNum - 1;
  984.             return;
  985.         }
  986.         var date = new Date();
  987.         if(obj.touches.length == 2) this.startZoomGesture = true;
  988.         if(this.lastTouchTime != null && obj.touches.length == 1) {
  989.             var lastTime = this.lastTouchTime.getTime();
  990.             var newTime = date.getTime();
  991.         }
  992.         this.lastTouchTime = date;
  993.         this.stopFlip();
  994.         this.touchActive = true;
  995.         if(this.zoomStatus == core.ZoomStatus.zoomed) this.touchActive = false;
  996.         this.onButtonLinkClick(touch.pageX,touch.pageY);
  997.         this.touchStartX = touch.clientX;
  998.         this.touchStartY = touch.clientY;
  999.         this.lastTouchX = this.touchStartX;
  1000.         this.lastTouchY = this.touchStartY;
  1001.     }
  1002.     ,onMouseMove: function(e) {
  1003.         e.stopPropagation();
  1004.         if(this.zoomStatus == core.ZoomStatus.zoomed) {
  1005.         }
  1006.     }
  1007.     ,onDblClick: function(e) {
  1008.         e.stopPropagation();
  1009.     }
  1010.     ,setCurrentPage: function(val) {
  1011.         var t = this.tbPage;
  1012.         t.value = Std.string(val);
  1013.     }
  1014.     ,setPageCount: function(val) {
  1015.         this.tbPageCount.innerHTML = "/ " + Std.string(val);
  1016.     }
  1017.     ,cPage: function() {
  1018.         this.zoomAt(0,0);
  1019.     }
  1020.     ,onEnterPage: function() {
  1021.         this.updateFullText();
  1022.         this.updateAudios();
  1023.         var cid = haxe.Timer.delay($bind(this,this.cPage),1000);
  1024.     }
  1025.     ,TansRightToLeft: function() {
  1026.         this.turnToPage(RunTime.book.pages.length - 1);
  1027.     }
  1028.     ,turnToLastPage: function(e) {
  1029.         this.clearZoom();
  1030.         this.stopFlip();
  1031.         if(RunTime.book.rightToLeft) this.turnToPage(0); else this.turnToPage(RunTime.book.pages.length - 1);
  1032.     }
  1033.     ,turnToFirstPage: function(e) {
  1034.         this.clearZoom();
  1035.         this.stopFlip();
  1036.         if(RunTime.book.rightToLeft) this.turnToPage(RunTime.book.pages.length - 1); else this.turnToPage(0);
  1037.     }
  1038.     ,turnToPrevPage: function(e) {
  1039.         this.clearZoom();
  1040.         this.stopFlip();
  1041.         this.turnPage(-1);
  1042.     }
  1043.     ,clearZoom: function() {
  1044.         if(this.zoomLeftPage.src != "") {
  1045.             this.zoomLeftPage.src = "";
  1046.             this.zoomLeftPage.style.display = "none";
  1047.         }
  1048.         if(this.zoomRightPage.src != "") {
  1049.             this.zoomRightPage.src = "";
  1050.             this.zoomRightPage.style.display = "none";
  1051.         }
  1052.         RunTime.clearPopupContents();
  1053.         this.resetNoteButton();
  1054.         this.resetHighlightButton();
  1055.     }
  1056.     ,turnToNextPage: function(e) {
  1057.         this.clearZoom();
  1058.         this.stopFlip();
  1059.         this.turnPage(1);
  1060.     }
  1061.     ,updateAds: function() {
  1062.     }
  1063.     ,turnToPage: function(pageNum) {
  1064.         this.clearZoom();
  1065.         this.preloadPages(pageNum);
  1066.         var page = RunTime.getPage(pageNum);
  1067.         if(page == null) return;
  1068.         this.setCurrentPage(pageNum + 1);
  1069.         this.currentPageNum = pageNum;
  1070.         this.hideTopBar();
  1071.         RunTime.flipBook.rightPageLock.style.display = "none";
  1072.         RunTime.flipBook.leftPageLock.style.display = "none";
  1073.         if(page != null && page.locked && RunTime.bLocked) RunTime.flipBook.leftPageLock.style.display = "block";
  1074.         this.clearSlideshow();
  1075.         this.loadCtxHotlinks();
  1076.         this.loadCtxSlideshow();
  1077.         this.loadCtxButtons();
  1078.         this.loadCtxHighLights();
  1079.         this.loadCtxNotes();
  1080.         this.loadCurrentBookmark();
  1081.         this.clearVideos();
  1082.         this.bookContext.removeAllPages();
  1083.         this.bookContext.resetLayoutParams();
  1084.         this.bookContext.addPage(page);
  1085.         this.bookContext.pageOffset = 0;
  1086.         this.bookContext.render();
  1087.         this.updateVideos();
  1088.         this.updateAudios();
  1089.         RunTime.logPageView(pageNum + 1);
  1090.     }
  1091.     ,turnPage: function(pageOffset) {
  1092.         if(this.bFlipping) return;
  1093.         if(pageOffset == 0) return;
  1094.         if(RunTime.book.rightToLeft) pageOffset = 0 - pageOffset;
  1095.         if(RunTime.book == null || RunTime.book.pages == null) return;
  1096.         var dstPageNum = this.currentPageNum + pageOffset;
  1097.         var dstPage = RunTime.getPage(dstPageNum);
  1098.         if(dstPage == null) return;
  1099.         this.resetZoom();
  1100.         this.setCurrentPage(dstPageNum + 1);
  1101.         this.preloadPages(dstPageNum + 1);
  1102.         var self = this;
  1103.         this.bookContext.removeAllPages();
  1104.         this.bookContext.resetLayoutParams();
  1105.         this.bookContext.addPage(RunTime.getPage(this.currentPageNum,0));
  1106.         this.bookContext.addPage(RunTime.getPage(this.currentPageNum,1));
  1107.         this.bookContext.addPage(RunTime.getPage(this.currentPageNum,-1));
  1108.         this.bookContext.pageOffset = 0;
  1109.         if(this.tweener != null) this.tweener.stop();
  1110.         var maxCount = 8;
  1111.         this.tweener.onChange = function(count) {
  1112.             var ratio = count / maxCount;
  1113.             if(RunTime.book.rightToLeft) self.bookContext.pageOffset = pageOffset * ratio * ratio; else self.bookContext.pageOffset = -pageOffset * ratio * ratio;
  1114.             if(count == maxCount) self.bookContext.pageOffset = -pageOffset;
  1115.             if(count == maxCount) {
  1116.                 self.currentPageNum = dstPageNum;
  1117.                 self.loadCtxHotlinks();
  1118.                 self.loadCtxSlideshow();
  1119.                 self.loadCtxButtons();
  1120.                 self.loadCtxHighLights();
  1121.                 self.loadCtxNotes();
  1122.                 self.loadCurrentBookmark();
  1123.                 self.updateVideos();
  1124.                 RunTime.flipBook.rightPageLock.style.display = "none";
  1125.                 RunTime.flipBook.leftPageLock.style.display = "none";
  1126.                 if(dstPage != null && dstPage.locked && RunTime.bLocked) RunTime.flipBook.leftPageLock.style.display = "block";
  1127.                 RunTime.logPageView(dstPageNum + 1);
  1128.                 RunTime.clearPopupContents();
  1129.                 self.onEnterPage();
  1130.             }
  1131.             self.bookContext.render();
  1132.         };
  1133.         this.clearCtxHotlinks();
  1134.         this.clearCtxButtons();
  1135.         this.clearVideos();
  1136.         this.clearSlideshow();
  1137.         this.tweener.start(maxCount | 0);
  1138.     }
  1139.     ,onMouseDown: function(e) {
  1140.         e.stopPropagation();
  1141.         this.onButtonLinkClick(e.pageX,e.pageY);
  1142.         if(this.bStartHighLight || this.bStartNote) return;
  1143.         if(Math.abs(js.Lib.window.innerWidth - RunTime.clientWidth) < 10) {
  1144.             if(this.topMenuBarBg.style.opacity != RunTime.bottomBarAlpha) this.showBottomBar(e); else this.hideBottomBar(e);
  1145.         }
  1146.     }
  1147.     ,onMouseUp: function(e) {
  1148.     }
  1149.     ,onNoteClick: function(x,y) {
  1150.         var note = this.bookContext.getNoteAt(x,y);
  1151.         if(note != null && this.bStartNote) {
  1152.             RunTime.currentNote = note;
  1153.             note.click();
  1154.             return true;
  1155.         } else RunTime.currentNote = null;
  1156.         return false;
  1157.     }
  1158.     ,onHighLightClick: function(x,y) {
  1159.         var highlight = this.bookContext.getHighLightAt(x,y);
  1160.         if(highlight != null) {
  1161.             RunTime.currentHighLight = highlight;
  1162.             highlight.click();
  1163.             return true;
  1164.         } else RunTime.currentHighLight = null;
  1165.         return false;
  1166.     }
  1167.     ,onButtonLinkClick: function(x,y) {
  1168.         var hotlink = this.bookContext.getHotLinkAt(x,y);
  1169.         if(hotlink != null) {
  1170.             hotlink.click();
  1171.             return true;
  1172.         }
  1173.         var button = this.bookContext.getButtonAt(x,y);
  1174.         if(button != null) {
  1175.             button.click();
  1176.             return true;
  1177.         }
  1178.         return false;
  1179.     }
  1180.     ,loadPage: function(index) {
  1181.         RunTime.flipBook.rightPageLock.style.display = "none";
  1182.         this.preloadPages(index);
  1183.         this.currentPageNum = index;
  1184.         this.loadCtxHotlinks();
  1185.         this.loadCtxSlideshow();
  1186.         this.loadCurrentBookmark();
  1187.         var page = RunTime.getPage(this.currentPageNum);
  1188.         this.bookContext.addPage(page);
  1189.         if(page != null && page.locked && RunTime.bLocked) RunTime.flipBook.leftPageLock.style.display = "block";
  1190.         this.bookContext.render();
  1191.         var p = this.currentPageNum;
  1192.         if(p == null) p = 0;
  1193.         RunTime.logPageView(p + 1);
  1194.         this.onEnterPage();
  1195.     }
  1196.     ,afterInit: function() {
  1197.     }
  1198.     ,forbidden: function(e) {
  1199.         e.preventDefault();
  1200.         e.stopPropagation();
  1201.     }
  1202.     ,attachActions: function() {
  1203.         if(this.root == null) return;
  1204.         this.mask.onclick = $bind(this,this.onMouseDown);
  1205.         this.mask.ontouchstart = $bind(this,this.onTouchStart);
  1206.         this.mask.ontouchmove = $bind(this,this.onTouchMove);
  1207.         this.mask.ontouchend = $bind(this,this.onTouchEnd);
  1208.         this.mask.ontouchcancel = $bind(this,this.onTouchEnd);
  1209.         this.mask.gestureend = $bind(this,this.onGestureEnd);
  1210.         this.mask.gesturestart = $bind(this,this.onGestureStart);
  1211.         this.mask.gesturechange = $bind(this,this.onGestureChange);
  1212.         this.mask.onscroll = $bind(this,this.forbidden);
  1213.         this.mask.onmousewheel = $bind(this,this.forbidden);
  1214.         this.cvsVideo.onclick = $bind(this,this.onMouseDown);
  1215.         this.cvsVideo.ontouchstart = $bind(this,this.onTouchStart);
  1216.         this.cvsVideo.ontouchmove = $bind(this,this.onTouchMove);
  1217.         this.cvsVideo.ontouchend = $bind(this,this.onTouchEnd);
  1218.         this.cvsVideo.ontouchcancel = $bind(this,this.onTouchEnd);
  1219.         this.cvsVideo.gestureend = $bind(this,this.onGestureEnd);
  1220.         this.cvsVideo.gesturestart = $bind(this,this.onGestureStart);
  1221.         this.cvsVideo.gesturechange = $bind(this,this.onGestureChange);
  1222.         this.maskPopup.onscroll = $bind(this,this.forbidden);
  1223.         this.maskPopup.onmousewheel = $bind(this,this.forbidden);
  1224.         if(js.Lib.window.navigator.userAgent.indexOf("iPad") != -1) {
  1225.             this.topBarContent.ontouchstart = $bind(this,this.onTopBarTouchStart);
  1226.             this.topBarContent.ontouchmove = $bind(this,this.onTopBarTouchMove);
  1227.             this.topBarContent.ontouchend = $bind(this,this.onTopBarTouchEnd);
  1228.             this.topBarContent.ontouchcancel = $bind(this,this.onTopBarTouchEnd);
  1229.             this.topFullTextContent.ontouchstart = $bind(this,this.onTopBarTouchStart);
  1230.             this.topFullTextContent.ontouchmove = $bind(this,this.onTopBarTouchMove);
  1231.             this.topFullTextContent.ontouchend = $bind(this,this.onTopBarTouchEnd);
  1232.             this.topFullTextContent.ontouchcancel = $bind(this,this.onTopBarTouchEnd);
  1233.         }
  1234.         this.btnNextPage.onclick = $bind(this,this.turnToNextPage);
  1235.         this.btnPrevPage.onclick = $bind(this,this.turnToPrevPage);
  1236.         this.btnFirstPage.onclick = $bind(this,this.turnToFirstPage);
  1237.         this.btnLastPage.onclick = $bind(this,this.turnToLastPage);
  1238.         this.btnNextPage.ontouchstart = $bind(this,this.turnToNextPage);
  1239.         this.btnPrevPage.ontouchstart = $bind(this,this.turnToPrevPage);
  1240.         this.btnFirstPage.ontouchstart = $bind(this,this.turnToFirstPage);
  1241.         this.btnLastPage.ontouchstart = $bind(this,this.turnToLastPage);
  1242.         this.btnContents.onclick = $bind(this,this.onContentsClick);
  1243.         this.btnEmail.onclick = $bind(this,this.onEmailClick);
  1244.         this.btnSns.onclick = $bind(this,this.onSnsClick);
  1245.         this.btnThumbs.onclick = $bind(this,this.onThumbsClick);
  1246.         this.btnSearch.ontouchstart = $bind(this,this.onSearchClick);
  1247.         this.btnAutoFlip.ontouchstart = $bind(this,this.onAutoFlipClick);
  1248.         this.btnShowTxt.ontouchstart = $bind(this,this.onShowTxtClick);
  1249.         this.tbPage.onfocus = $bind(this,this.onTbPageFocus);
  1250.         this.btnZoom.ontouchstart = $bind(this,this.onZoomClick);
  1251.         this.btnMask.ontouchstart = $bind(this,this.onButtonMaskClick);
  1252.         this.btnBookMark.ontouchstart = $bind(this,this.onButtonBookmark);
  1253.         this.btnNote.ontouchstart = $bind(this,this.onButtonNoteClick);
  1254.         this.btnAboutUs.onclick = $bind(this,this.onAboutUsClick);
  1255.     }
  1256.     ,requestMainAd: function() {
  1257.     }
  1258.     ,getBookmarkContext: function() {
  1259.         return this.cvsBookmark.getContext("2d");
  1260.     }
  1261.     ,getNoteContext: function() {
  1262.         return this.cvsNote.getContext("2d");
  1263.     }
  1264.     ,getHighLightContext: function() {
  1265.         return this.cvsHighLight.getContext("2d");
  1266.     }
  1267.     ,getButtonContext: function() {
  1268.         return this.cvsButton.getContext("2d");
  1269.     }
  1270.     ,getContext: function() {
  1271.         return this.canvas.getContext("2d");
  1272.     }
  1273.     ,__class__: FlipBook
  1274. }
  1275. var DoubleFlipBook = function() {
  1276.     this.mainAdLayout = "center";
  1277.     this.mainAdDockPos = "halfpage";
  1278.     FlipBook.call(this);
  1279. };
  1280. DoubleFlipBook.__name__ = true;
  1281. DoubleFlipBook.__super__ = FlipBook;
  1282. DoubleFlipBook.prototype = $extend(FlipBook.prototype,{
  1283.     loadCtxNotes: function() {
  1284.         var pair = this.getCurrentPair();
  1285.         var notes = new Array();
  1286.         if(RunTime.book != null && RunTime.book.notes != null) {
  1287.             var _g1 = 0, _g = RunTime.book.notes.length;
  1288.             while(_g1 < _g) {
  1289.                 var i = _g1++;
  1290.                 var item = RunTime.book.notes[i];
  1291.                 var match = pair.match(item.pageNum);
  1292.                 if(match != 0) {
  1293.                     item.pageLayoutType = match;
  1294.                     notes.push(item);
  1295.                 }
  1296.             }
  1297.         }
  1298.         this.bookContext.notes = notes;
  1299.     }
  1300.     ,loadCtxHighLights: function() {
  1301.         var pair = this.getCurrentPair();
  1302.         var highlights = new Array();
  1303.         if(RunTime.book != null && RunTime.book.highlights != null) {
  1304.             var _g1 = 0, _g = RunTime.book.highlights.length;
  1305.             while(_g1 < _g) {
  1306.                 var i = _g1++;
  1307.                 var item = RunTime.book.highlights[i];
  1308.                 var match = pair.match(item.pageNum);
  1309.                 if(match != 0) {
  1310.                     item.pageLayoutType = match;
  1311.                     highlights.push(item);
  1312.                 }
  1313.             }
  1314.         }
  1315.         this.bookContext.highlights = highlights;
  1316.     }
  1317.     ,loadCtxButtons: function() {
  1318.         var buttons = new Array();
  1319.         if(RunTime.book != null && RunTime.book.buttons != null) {
  1320.             var pair = this.getCurrentPair();
  1321.             var _g1 = 0, _g = RunTime.book.buttons.length;
  1322.             while(_g1 < _g) {
  1323.                 var i = _g1++;
  1324.                 var item = RunTime.book.buttons[i];
  1325.                 var match = pair.match(item.pageNum);
  1326.                 if(match != 0 && item.layer == "onpage") {
  1327.                     item.pageLayoutType = match;
  1328.                     buttons.push(item);
  1329.                 } else if(item.layer == "foreground") {
  1330.                     if((item.pageNum + 1) % 2 != 0) item.pageLayoutType = 1; else item.pageLayoutType = -1;
  1331.                     buttons.push(item);
  1332.                 } else if(item.layer == "background") {
  1333.                     if(pair.leftPage == null && (item.pageNum + 1) % 2 == 0) {
  1334.                         item.pageLayoutType = -1;
  1335.                         buttons.push(item);
  1336.                     }
  1337.                     if(pair.rightPage == null && (item.pageNum + 1) % 2 != 0) {
  1338.                         item.pageLayoutType = 1;
  1339.                         buttons.push(item);
  1340.                     }
  1341.                 }
  1342.             }
  1343.         }
  1344.         this.bookContext.buttons = buttons;
  1345.     }
  1346.     ,canTurnRight: function() {
  1347.         var num = this.getCurrentPageNum();
  1348.         var count = RunTime.book.pages.length;
  1349.         if(num % 2 == 1) num++;
  1350.         return num < count - 1;
  1351.     }
  1352.     ,showPopupAudio: function(item) {
  1353.         item.url = item.destination;
  1354.         var pageNum = item.pageNum;
  1355.         var audio = new core.AudioInfo();
  1356.         audio.pageNum = pageNum;
  1357.         audio.url = item.destination;
  1358.         if(pageNum % 2 == 1) {
  1359.             this.cvsLeftPageBgAudio.innerHTML = "";
  1360.             this.cvsLeftPageBgAudio.innerHTML = core.HtmlHelper.toPopupPageAudiosHtml(audio,true);
  1361.             var item1 = js.Lib.document.getElementById("cvsLeftPageBgAudio").getElementsByTagName("audio")[0];
  1362.             item1.play();
  1363.         } else {
  1364.             this.cvsRightPageBgAudio.innerHTML = "";
  1365.             this.cvsRightPageBgAudio.innerHTML = core.HtmlHelper.toPopupPageAudiosHtml(audio,false);
  1366.             var item1 = js.Lib.document.getElementById("cvsRightPageBgAudio").getElementsByTagName("audio")[0];
  1367.             item1.play();
  1368.         }
  1369.     }
  1370.     ,turnPage: function(pageOffset) {
  1371.         var current = 0;
  1372.         if(this.currentPageNum != null) current = this.currentPageNum;
  1373.         if(RunTime.book.rightToLeft) pageOffset = 0 - pageOffset;
  1374.         current = current + pageOffset * 2;
  1375.         if(current < 0) current = 0;
  1376.         if(current >= RunTime.book.pages.length) current = RunTime.book.pages.length - 1;
  1377.         this.turnToPage(current);
  1378.     }
  1379.     ,setCurrentPage: function(val) {
  1380.         var count = RunTime.book.pages.length;
  1381.         var t = this.tbPage;
  1382.         if(val == 1) {
  1383.             t.value = Std.string(val);
  1384.             this.leftPageNum = -1;
  1385.             this.rightPageNum = val;
  1386.         } else if(val % 2 == 0 && val == count) {
  1387.             t.value = Std.string(val);
  1388.             this.leftPageNum = val;
  1389.             this.rightPageNum = -1;
  1390.         } else {
  1391.             var v0 = val - val % 2;
  1392.             var v1 = v0 + 1;
  1393.             this.leftPageNum = v0;
  1394.             this.rightPageNum = v1;
  1395.             t.value = Std.string(v0) + "-" + Std.string(v1);
  1396.         }
  1397.     }
  1398.     ,loadCtxVideos: function() {
  1399.         var videos = new Array();
  1400.         if(RunTime.book != null && RunTime.book.videos != null) {
  1401.             var pair = this.getCurrentPair();
  1402.             var _g1 = 0, _g = RunTime.book.videos.length;
  1403.             while(_g1 < _g) {
  1404.                 var i = _g1++;
  1405.                 var item = RunTime.book.videos[i];
  1406.                 var match = pair.match(item.pageNum);
  1407.                 if(match != 0) {
  1408.                     item.pageLayoutType = match;
  1409.                     videos.push(item);
  1410.                 }
  1411.             }
  1412.         }
  1413.         this.bookContext.videos = videos;
  1414.     }
  1415.     ,loadCtxHotlinks: function() {
  1416.         var links = new Array();
  1417.         if(RunTime.book != null && RunTime.book.hotlinks != null) {
  1418.             var pair = this.getCurrentPair();
  1419.             var _g1 = 0, _g = RunTime.book.hotlinks.length;
  1420.             while(_g1 < _g) {
  1421.                 var i = _g1++;
  1422.                 var item = RunTime.book.hotlinks[i];
  1423.                 var match = pair.match(item.pageNum);
  1424.                 if(match != 0) {
  1425.                     item.pageLayoutType = match;
  1426.                     links.push(item);
  1427.                 }
  1428.             }
  1429.         }
  1430.         this.bookContext.hotlinks = links;
  1431.     }
  1432.     ,loadCtxSlideshow: function() {
  1433.         var slides = new Array();
  1434.         if(RunTime.book != null && RunTime.book.slideshows != null) {
  1435.             var pair = this.getCurrentPair();
  1436.             var _g1 = 0, _g = RunTime.book.slideshows.length;
  1437.             while(_g1 < _g) {
  1438.                 var i = _g1++;
  1439.                 var item = RunTime.book.slideshows[i];
  1440.                 var match = pair.match(item.pageNum);
  1441.                 if(match != 0) {
  1442.                     item.pageLayoutType = match;
  1443.                     slides.push(item);
  1444.                 }
  1445.             }
  1446.         }
  1447.         this.bookContext.slideshow = slides;
  1448.         this.updateSlideshow();
  1449.     }
  1450.     ,zoomAt: function(point0,point1) {
  1451.         var num = 0;
  1452.         if(this.currentPageNum != null) num = this.currentPageNum;
  1453.         var pair = this.getCurrentPair();
  1454.         if(point0 == null || point1 == null) this.pageZoomOut(); else this.pageZoomIn(pair,point0,point1);
  1455.     }
  1456.     ,pageZoomIn: function(page,point0,point1) {
  1457.         this.zoomStatus = core.ZoomStatus.zoomed;
  1458.         if(page == null) return;
  1459.         if(page.leftPage != null) {
  1460.             if(!page.leftPage.locked) this.zoomLeftPage.src = page.leftPage.getBigPageUrl(); else {
  1461.             }
  1462.             this.zoomLeftPage.style.display = "inline";
  1463.         }
  1464.         if(page.rightPage != null) {
  1465.             if(!page.rightPage.locked) this.zoomRightPage.src = page.rightPage.getBigPageUrl(); else {
  1466.             }
  1467.             this.zoomRightPage.style.display = "inline";
  1468.         }
  1469.     }
  1470.     ,pageZoomOut: function() {
  1471.         this.zoomStatus = core.ZoomStatus.normal;
  1472.         this.page_offsetX = 0;
  1473.         this.page_offsetY = 0;
  1474.         if(this.bShowBottomBar) this.showBottomBar(null);
  1475.     }
  1476.     ,getCurrentPair: function() {
  1477.         var current = 0;
  1478.         if(this.currentPageNum != null) current = this.currentPageNum;
  1479.         return new core.PagePair(current);
  1480.     }
  1481.     ,onReadyTouchEnd: function(e) {
  1482.     }
  1483.     ,getRealValue: function(value) {
  1484.         if(value == null || value == "") return 0;
  1485.         return Std.parseInt(value.substring(0,value.lastIndexOf("px")));
  1486.     }
  1487.     ,updateAds: function() {
  1488.         try {
  1489.             if(this.currentPageNum == 0) this.mainAdHtml.style.display = "block"; else this.mainAdHtml.style.display = "none";
  1490.         } catch( ex ) {
  1491.         }
  1492.     }
  1493.     ,requestMainAd: function() {
  1494.         this.mainAdHtml = js.Lib.document.getElementById("mainAdhtml");
  1495.         var an = js.Lib.document.getElementById("mainAdInner");
  1496.         this.mainAdInner = an;
  1497.         var img = js.Lib.document.getElementById("mainAdimg");
  1498.         this.mainAdImg = img;
  1499.         try {
  1500.             var ad = null;
  1501.             try {
  1502.                 ad = new haxe.xml.Fast(RunTime.bookInfo.firstElement().elementsNamed("mainAd").next());
  1503.             } catch( e ) {
  1504.             }
  1505.             if(ad != null) {
  1506.                 if(ad.has.resolve("dockPos")) this.mainAdDockPos = ad.att.resolve("dockPos");
  1507.                 this.mainAdHtml.style.display = "block";
  1508.                 this.mainAdHtml.style.marginRight = 0;
  1509.                 this.mainAdHtml.style.height = RunTime.clientHeight + "px";
  1510.                 if(this.mainAdDockPos == "halfpage") {
  1511.                     this.mainAdHtml.style.width = RunTime.imagePageWidth + "px";
  1512.                     this.mainAdHtml.style.left = RunTime.clientWidth / 2 - RunTime.imagePageWidth + "px";
  1513.                     this.mainAdHtml.style.right = RunTime.clientWidth / 2 + "px";
  1514.                 } else if(this.mainAdDockPos == "halfscreen") {
  1515.                     this.mainAdHtml.style.left = "0px";
  1516.                     this.mainAdHtml.style.width = RunTime.clientWidth / 2 + "px";
  1517.                 }
  1518.                 var isHtmlAD = false;
  1519.                 try {
  1520.                     if(ad.getInnerData() != null && StringTools.trim(ad.getInnerData()) != "") isHtmlAD = true;
  1521.                 } catch( err ) {
  1522.                 }
  1523.                 if(isHtmlAD) {
  1524.                     this.mainAdHtml.style.overflow = "hide";
  1525.                     this.mainAdHtml.innerHTML = ad.getInnerData();
  1526.                 } else if(ad.has.resolve("url")) {
  1527.                     this.mainAdInner.style.styleFloat = "right";
  1528.                     this.mainAdImg.src = ad.att.resolve("url");
  1529.                     if(ad.has.resolve("layout")) this.mainAdLayout = ad.att.resolve("layout");
  1530.                     if(ad.has.resolve("href")) {
  1531.                         this.mainAdHref = ad.att.resolve("href");
  1532.                         this.mainAdInner.href = this.mainAdHref;
  1533.                         this.mainAdInner.target = ad.has.resolve("target")?ad.att.resolve("target"):"_blank";
  1534.                     }
  1535.                     if(this.mainAdLayout == "center") {
  1536.                         this.mainAdInner.style.top = (RunTime.clientHeight - this.getRealValue(this.mainAdImg.style.height)) / 4 + "px";
  1537.                         this.mainAdInner.style.verticalAlign = "middle";
  1538.                         this.mainAdInner.style.textAlign = "right";
  1539.                         this.mainAdImg.style.maxHeight = this.mainAdHtml.style.height;
  1540.                         this.mainAdImg.style.maxWidth = this.mainAdHtml.style.width;
  1541.                     } else if(this.mainAdLayout == "stretch") {
  1542.                         this.mainAdImg.style.height = this.mainAdHtml.style.height;
  1543.                         this.mainAdImg.style.width = this.mainAdHtml.style.width;
  1544.                     } else {
  1545.                         this.mainAdInner.style.top = (RunTime.clientHeight - this.getRealValue(this.mainAdImg.style.height)) / 4 + "px";
  1546.                         this.mainAdInner.style.verticalAlign = "middle";
  1547.                         this.mainAdInner.style.textAlign = "right";
  1548.                         this.mainAdImg.style.maxHeight = this.mainAdHtml.style.height;
  1549.                         this.mainAdImg.style.maxWidth = this.mainAdHtml.style.width;
  1550.                     }
  1551.                 }
  1552.             }
  1553.         } catch( e ) {
  1554.             js.Lib.alert(e);
  1555.         }
  1556.     }
  1557.     ,turnToPage: function(pageNum) {
  1558.         var _g = this;
  1559.         this.preloadPages(pageNum);
  1560.         var current = this.getCurrentPageNum();
  1561.         if(current < 0 || current >= RunTime.book.pages.length) return;
  1562.         if(pageNum < 0 || pageNum >= RunTime.book.pages.length) return;
  1563.         var oldPair = new core.PagePair(current);
  1564.         var newPair = new core.PagePair(pageNum);
  1565.         var oldNum = oldPair.getNumInDoubleMode();
  1566.         var newNum = newPair.getNumInDoubleMode();
  1567.         if(newNum < 0 || oldNum == newNum) return;
  1568.         this.bookContext.removeAllPages();
  1569.         this.bookContext.resetLayoutParams();
  1570.         this.setCurrentPage(pageNum + 1);
  1571.         this.bookContext.addPage(oldPair.leftPage);
  1572.         this.bookContext.addPage(oldPair.rightPage);
  1573.         this.bookContext.addPage(newPair.leftPage);
  1574.         this.bookContext.addPage(newPair.rightPage);
  1575.         if(newPair.leftPage != null) RunTime.logPageView(newPair.leftPage.num + 1);
  1576.         if(newPair.rightPage != null) RunTime.logPageView(newPair.rightPage.num + 1);
  1577.         this.bookContext.pageOffset = 0;
  1578.         var pageOffset = 0;
  1579.         var offset = 0;
  1580.         var dstPageOffset = newNum > oldNum?1:-1;
  1581.         var ldp = RunTime.getDrawParams(-1);
  1582.         var rdp = RunTime.getDrawParams(1);
  1583.         var update = function(val) {
  1584.             var downLeft = oldPair.leftPage;
  1585.             var downRight = oldPair.rightPage;
  1586.             var upLeft = newPair.leftPage;
  1587.             var upRight = newPair.rightPage;
  1588.             if(dstPageOffset > 0) {
  1589.                 if(RunTime.book.rightToLeft) {
  1590.                     if(downLeft != null) {
  1591.                         if(val <= 0.5) downLeft.drawParams = ldp; else downLeft.drawParams = ldp.sliceRight(2 - val * 2);
  1592.                     }
  1593.                     if(downRight != null) {
  1594.                     }
  1595.                     if(upLeft != null) upLeft.drawParams = ldp.sliceRight(val,-ldp.dw * 2 * (1 - val));
  1596.                     if(upRight != null) upRight.drawParams = rdp.sliceLeft(val);
  1597.                 } else {
  1598.                     if(downLeft != null) {
  1599.                         if(val <= 0.5) downLeft.drawParams = ldp; else downLeft.drawParams = ldp.sliceLeft(2 - val * 2);
  1600.                     }
  1601.                     if(downRight != null) {
  1602.                     }
  1603.                     if(upLeft != null) upLeft.drawParams = ldp.sliceLeft(val,ldp.dw * 2 * (1 - val));
  1604.                     if(upRight != null) upRight.drawParams = rdp.sliceRight(val);
  1605.                 }
  1606.             } else {
  1607.                 val = -val;
  1608.                 if(RunTime.book.rightToLeft) {
  1609.                     if(downLeft != null) {
  1610.                         if(val <= 0.5) downLeft.drawParams = ldp.sliceLeft(1 - 2 * val); else downLeft.drawParams = null;
  1611.                     }
  1612.                     if(downRight != null) {
  1613.                         if(val <= 0.5) downRight.drawParams = rdp; else downRight.drawParams = rdp.sliceLeft(2 - val * 2);
  1614.                     }
  1615.                     if(upLeft != null) upLeft.drawParams = ldp.sliceRight(val);
  1616.                     if(upRight != null) upRight.drawParams = rdp.sliceLeft(val,rdp.dw * 2 * (1 - val));
  1617.                 } else {
  1618.                     if(downLeft != null) {
  1619.                         if(val <= 0.5) downLeft.drawParams = ldp.sliceRight(1 - 2 * val); else downLeft.drawParams = null;
  1620.                     }
  1621.                     if(downRight != null) {
  1622.                         if(val <= 0.5) downRight.drawParams = rdp; else downRight.drawParams = rdp.sliceRight(2 - val * 2);
  1623.                     }
  1624.                     if(upLeft != null) upLeft.drawParams = ldp.sliceLeft(val);
  1625.                     if(upRight != null) upRight.drawParams = rdp.sliceRight(val,-rdp.dw * 2 * (1 - val));
  1626.                 }
  1627.             }
  1628.         };
  1629.         update(0);
  1630.         if(this.tweener != null) this.tweener.stop();
  1631.         var self = this;
  1632.         var ctx = this.bookContext;
  1633.         var maxCount = 8;
  1634.         this.tweener.onChange = function(count) {
  1635.             var ratio = count / maxCount;
  1636.             offset = dstPageOffset * ratio * ratio * ratio;
  1637.             update(offset);
  1638.             if(count == maxCount) {
  1639.                 ctx.clear(true);
  1640.                 ctx.addPage(newPair.leftPage);
  1641.                 ctx.addPage(newPair.rightPage);
  1642.                 self.currentPageNum = pageNum;
  1643.                 self.loadCtxHotlinks();
  1644.                 self.loadCtxSlideshow();
  1645.                 self.loadCtxButtons();
  1646.                 self.loadCtxHighLights();
  1647.                 self.loadCtxNotes();
  1648.                 self.loadCurrentBookmark();
  1649.                 self.updateVideos();
  1650.                 self.onEnterPage();
  1651.                 RunTime.flipBook.rightPageLock.style.display = "none";
  1652.                 RunTime.flipBook.leftPageLock.style.display = "none";
  1653.                 if(newPair.rightPage != null && newPair.rightPage.locked && RunTime.bLocked) RunTime.flipBook.rightPageLock.style.display = "block";
  1654.                 if(newPair.leftPage != null && newPair.leftPage.locked && RunTime.bLocked) RunTime.flipBook.leftPageLock.style.display = "block";
  1655.             }
  1656.             self.bookContext.render();
  1657.             _g.updateAds();
  1658.         };
  1659.         this.clearCtxHotlinks();
  1660.         this.clearCtxButtons();
  1661.         this.clearCtxNote();
  1662.         this.clearCtxHighLight();
  1663.         this.clearVideos();
  1664.         this.clearSlideshow();
  1665.         this.tweener.start(maxCount | 0);
  1666.         this.hideTopBar();
  1667.     }
  1668.     ,getCurrentPageAudios: function() {
  1669.         var audios = RunTime.book.audios;
  1670.         var match = { left : null, right : null};
  1671.         var lftPg = -1;
  1672.         var rtPg = -1;
  1673.         var p = this.getCurrentPair();
  1674.         if(p.leftPage != null) lftPg = p.leftPage.num;
  1675.         if(p.rightPage != null) rtPg = p.rightPage.num;
  1676.         var _g1 = 0, _g = audios.length;
  1677.         while(_g1 < _g) {
  1678.             var i = _g1++;
  1679.             var item = audios[i];
  1680.             if(item.pageNum == lftPg) match.left = item; else if(item.pageNum == rtPg) match.right = item;
  1681.         }
  1682.         return match;
  1683.     }
  1684.     ,getFullText: function(pages) {
  1685.         var lftPg = -1;
  1686.         var rtPg = -1;
  1687.         var p = this.getCurrentPair();
  1688.         if(p.leftPage != null) lftPg = p.leftPage.num;
  1689.         if(p.rightPage != null) rtPg = p.rightPage.num;
  1690.         if(lftPg > rtPg) {
  1691.             var tmp = rtPg;
  1692.             rtPg = lftPg;
  1693.             lftPg = tmp;
  1694.         }
  1695.         var result = "";
  1696.         var _g1 = 0, _g = pages.length;
  1697.         while(_g1 < _g) {
  1698.             var i = _g1++;
  1699.             var item = pages[i];
  1700.             if(item.num == lftPg) {
  1701.                 result += "<br />";
  1702.                 result += "<br />";
  1703.                 result += "==== Page " + Std.string(lftPg + 1) + " ====";
  1704.                 result += "<br />";
  1705.                 result += "<br />";
  1706.                 result += item.content;
  1707.                 result += "<br />";
  1708.                 result += "<br />";
  1709.             } else if(item.num == rtPg) {
  1710.                 result += "<br />";
  1711.                 result += "<br />";
  1712.                 result += "==== Page " + Std.string(rtPg + 1) + " ====";
  1713.                 result += "<br />";
  1714.                 result += "<br />";
  1715.                 result += item.content;
  1716.                 result += "<br />";
  1717.                 result += "<br />";
  1718.             }
  1719.         }
  1720.         result = StringTools.replace(result,"\n","<br />");
  1721.         return result;
  1722.     }
  1723.     ,loadPage: function(index) {
  1724.         this.preloadPages(index);
  1725.         this.currentPageNum = index;
  1726.         this.loadCtxHotlinks();
  1727.         this.loadCtxSlideshow();
  1728.         this.loadCtxButtons();
  1729.         this.loadCtxHighLights();
  1730.         this.loadCtxNotes();
  1731.         this.loadCurrentBookmark();
  1732.         this.updateVideos();
  1733.         var p = this.getCurrentPair();
  1734.         this.bookContext.addPage(p.leftPage);
  1735.         this.bookContext.addPage(p.rightPage);
  1736.         if(p.rightPage != null && p.rightPage.locked && RunTime.bLocked) RunTime.flipBook.rightPageLock.style.display = "block";
  1737.         if(p.leftPage != null && p.leftPage.locked && RunTime.bLocked) RunTime.flipBook.leftPageLock.style.display = "block";
  1738.         this.bookContext.render();
  1739.         if(p.leftPage != null) RunTime.logPageView(p.leftPage.num + 1);
  1740.         if(p.rightPage != null) RunTime.logPageView(p.rightPage.num + 1);
  1741.         this.onEnterPage();
  1742.         if(index != null) this.updateAds();
  1743.     }
  1744.     ,checkCanZoom: function() {
  1745.         var p = this.getCurrentPair();
  1746.         if(p.leftPage != null) {
  1747.             if(!p.leftPage.canZoom) return false;
  1748.         }
  1749.         if(p.rightPage != null) {
  1750.             if(!p.rightPage.canZoom) return false;
  1751.         }
  1752.         return true;
  1753.     }
  1754.     ,afterInit: function() {
  1755.         this.tbPage.style.width = "60px";
  1756.     }
  1757.     ,__class__: DoubleFlipBook
  1758. });
  1759. var EReg = function(r,opt) {
  1760.     opt = opt.split("u").join("");
  1761.     this.r = new RegExp(r,opt);
  1762. };
  1763. EReg.__name__ = true;
  1764. EReg.prototype = {
  1765.     customReplace: function(s,f) {
  1766.         var buf = new StringBuf();
  1767.         while(true) {
  1768.             if(!this.match(s)) break;
  1769.             buf.b += Std.string(this.matchedLeft());
  1770.             buf.b += Std.string(f(this));
  1771.             s = this.matchedRight();
  1772.         }
  1773.         buf.b += Std.string(s);
  1774.         return buf.b;
  1775.     }
  1776.     ,replace: function(s,by) {
  1777.         return s.replace(this.r,by);
  1778.     }
  1779.     ,split: function(s) {
  1780.         var d = "#__delim__#";
  1781.         return s.replace(this.r,d).split(d);
  1782.     }
  1783.     ,matchedPos: function() {
  1784.         if(this.r.m == null) throw "No string matched";
  1785.         return { pos : this.r.m.index, len : this.r.m[0].length};
  1786.     }
  1787.     ,matchedRight: function() {
  1788.         if(this.r.m == null) throw "No string matched";
  1789.         var sz = this.r.m.index + this.r.m[0].length;
  1790.         return this.r.s.substr(sz,this.r.s.length - sz);
  1791.     }
  1792.     ,matchedLeft: function() {
  1793.         if(this.r.m == null) throw "No string matched";
  1794.         return this.r.s.substr(0,this.r.m.index);
  1795.     }
  1796.     ,matched: function(n) {
  1797.         return this.r.m != null && n >= 0 && n < this.r.m.length?this.r.m[n]:(function($this) {
  1798.             var $r;
  1799.             throw "EReg::matched";
  1800.             return $r;
  1801.         }(this));
  1802.     }
  1803.     ,match: function(s) {
  1804.         if(this.r.global) this.r.lastIndex = 0;
  1805.         this.r.m = this.r.exec(s);
  1806.         this.r.s = s;
  1807.         return this.r.m != null;
  1808.     }
  1809.     ,__class__: EReg
  1810. }
  1811. var Hash = function() {
  1812.     this.h = { };
  1813. };
  1814. Hash.__name__ = true;
  1815. Hash.prototype = {
  1816.     toString: function() {
  1817.         var s = new StringBuf();
  1818.         s.b += Std.string("{");
  1819.         var it = this.keys();
  1820.         while( it.hasNext() ) {
  1821.             var i = it.next();
  1822.             s.b += Std.string(i);
  1823.             s.b += Std.string(" => ");
  1824.             s.b += Std.string(Std.string(this.get(i)));
  1825.             if(it.hasNext()) s.b += Std.string(", ");
  1826.         }
  1827.         s.b += Std.string("}");
  1828.         return s.b;
  1829.     }
  1830.     ,iterator: function() {
  1831.         return { ref : this.h, it : this.keys(), hasNext : function() {
  1832.             return this.it.hasNext();
  1833.         }, next : function() {
  1834.             var i = this.it.next();
  1835.             return this.ref["$" + i];
  1836.         }};
  1837.     }
  1838.     ,keys: function() {
  1839.         var a = [];
  1840.         for( var key in this.h ) {
  1841.         if(this.h.hasOwnProperty(key)) a.push(key.substr(1));
  1842.         }
  1843.         return HxOverrides.iter(a);
  1844.     }
  1845.     ,remove: function(key) {
  1846.         key = "$" + key;
  1847.         if(!this.h.hasOwnProperty(key)) return false;
  1848.         delete(this.h[key]);
  1849.         return true;
  1850.     }
  1851.     ,exists: function(key) {
  1852.         return this.h.hasOwnProperty("$" + key);
  1853.     }
  1854.     ,get: function(key) {
  1855.         return this.h["$" + key];
  1856.     }
  1857.     ,set: function(key,value) {
  1858.         this.h["$" + key] = value;
  1859.     }
  1860.     ,__class__: Hash
  1861. }
  1862. var HtmlDomHelper = function() { }
  1863. HtmlDomHelper.__name__ = true;
  1864. HtmlDomHelper.setTopBarDefaultSize = function(dom) {
  1865.     dom.style.width = "500px";
  1866.     dom.style.left = Std.string((RunTime.clientWidth - 500) / 2 | 0) + "px";
  1867. }
  1868. HtmlDomHelper.setTopBarMaxSize = function(dom) {
  1869.     dom.style.width = Std.string(RunTime.clientWidth | 0) + "px";
  1870.     dom.style.left = "0px";
  1871. }
  1872. HtmlDomHelper.setTopFullTextContentMaxSize = function(dom) {
  1873.     dom.style.width = Std.string((RunTime.clientWidth | 0) - 20) + "px";
  1874.     dom.style.top = "35px";
  1875.     dom.style.height = Std.string((RunTime.clientHeight | 0) - 80) + "px";
  1876.     dom.style.left = "0px";
  1877. }
  1878. var HxOverrides = function() { }
  1879. HxOverrides.__name__ = true;
  1880. HxOverrides.dateStr = function(date) {
  1881.     var m = date.getMonth() + 1;
  1882.     var d = date.getDate();
  1883.     var h = date.getHours();
  1884.     var mi = date.getMinutes();
  1885.     var s = date.getSeconds();
  1886.     return date.getFullYear() + "-" + (m < 10?"0" + m:"" + m) + "-" + (d < 10?"0" + d:"" + d) + " " + (h < 10?"0" + h:"" + h) + ":" + (mi < 10?"0" + mi:"" + mi) + ":" + (s < 10?"0" + s:"" + s);
  1887. }
  1888. HxOverrides.strDate = function(s) {
  1889.     switch(s.length) {
  1890.     case 8:
  1891.         var k = s.split(":");
  1892.         var d = new Date();
  1893.         d.setTime(0);
  1894.         d.setUTCHours(k[0]);
  1895.         d.setUTCMinutes(k[1]);
  1896.         d.setUTCSeconds(k[2]);
  1897.         return d;
  1898.     case 10:
  1899.         var k = s.split("-");
  1900.         return new Date(k[0],k[1] - 1,k[2],0,0,0);
  1901.     case 19:
  1902.         var k = s.split(" ");
  1903.         var y = k[0].split("-");
  1904.         var t = k[1].split(":");
  1905.         return new Date(y[0],y[1] - 1,y[2],t[0],t[1],t[2]);
  1906.     default:
  1907.         throw "Invalid date format : " + s;
  1908.     }
  1909. }
  1910. HxOverrides.cca = function(s,index) {
  1911.     var x = s.charCodeAt(index);
  1912.     if(x != x) return undefined;
  1913.     return x;
  1914. }
  1915. HxOverrides.substr = function(s,pos,len) {
  1916.     if(pos != null && pos != 0 && len != null && len < 0) return "";
  1917.     if(len == null) len = s.length;
  1918.     if(pos < 0) {
  1919.         pos = s.length + pos;
  1920.         if(pos < 0) pos = 0;
  1921.     } else if(len < 0) len = s.length + len - pos;
  1922.     return s.substr(pos,len);
  1923. }
  1924. HxOverrides.remove = function(a,obj) {
  1925.     var i = 0;
  1926.     var l = a.length;
  1927.     while(i < l) {
  1928.         if(a[i] == obj) {
  1929.             a.splice(i,1);
  1930.             return true;
  1931.         }
  1932.         i++;
  1933.     }
  1934.     return false;
  1935. }
  1936. HxOverrides.iter = function(a) {
  1937.     return { cur : 0, arr : a, hasNext : function() {
  1938.         return this.cur < this.arr.length;
  1939.     }, next : function() {
  1940.         return this.arr[this.cur++];
  1941.     }};
  1942. }
  1943. var IntIter = function(min,max) {
  1944.     this.min = min;
  1945.     this.max = max;
  1946. };
  1947. IntIter.__name__ = true;
  1948. IntIter.prototype = {
  1949.     next: function() {
  1950.         return this.min++;
  1951.     }
  1952.     ,hasNext: function() {
  1953.         return this.min < this.max;
  1954.     }
  1955.     ,__class__: IntIter
  1956. }
  1957. var L = function() { }
  1958. L.__name__ = true;
  1959. L.s = function(key,dftVal) {
  1960.     if(L.instance.exists(key) == false) return dftVal != null?dftVal:key; else return L.instance.get(key);
  1961. }
  1962. L.loadRemote = function(url,onSuccess,onError) {
  1963.     orc.utils.Util.request(url,function(data) {
  1964.         var xml = Xml.parse(data);
  1965.         L.loadXml(xml);
  1966.         if(onSuccess != null) onSuccess();
  1967.     },onError);
  1968. }
  1969. L.loadXml = function(xml) {
  1970.     if(xml == null) return;
  1971.     var i = xml.elementsNamed("lang");
  1972.     if(i.hasNext() == false) return;
  1973.     xml = i.next();
  1974.     i = xml.elementsNamed("item");
  1975.     while(i.hasNext() == true) {
  1976.         var node = i.next();
  1977.         var key = node.get("key");
  1978.         var val = node.get("value");
  1979.         L.instance.set(key,val);
  1980.     }
  1981. }
  1982. var List = function() {
  1983.     this.length = 0;
  1984. };
  1985. List.__name__ = true;
  1986. List.prototype = {
  1987.     map: function(f) {
  1988.         var b = new List();
  1989.         var l = this.h;
  1990.         while(l != null) {
  1991.             var v = l[0];
  1992.             l = l[1];
  1993.             b.add(f(v));
  1994.         }
  1995.         return b;
  1996.     }
  1997.     ,filter: function(f) {
  1998.         var l2 = new List();
  1999.         var l = this.h;
  2000.         while(l != null) {
  2001.             var v = l[0];
  2002.             l = l[1];
  2003.             if(f(v)) l2.add(v);
  2004.         }
  2005.         return l2;
  2006.     }
  2007.     ,join: function(sep) {
  2008.         var s = new StringBuf();
  2009.         var first = true;
  2010.         var l = this.h;
  2011.         while(l != null) {
  2012.             if(first) first = false; else s.b += Std.string(sep);
  2013.             s.b += Std.string(l[0]);
  2014.             l = l[1];
  2015.         }
  2016.         return s.b;
  2017.     }
  2018.     ,toString: function() {
  2019.         var s = new StringBuf();
  2020.         var first = true;
  2021.         var l = this.h;
  2022.         s.b += Std.string("{");
  2023.         while(l != null) {
  2024.             if(first) first = false; else s.b += Std.string(", ");
  2025.             s.b += Std.string(Std.string(l[0]));
  2026.             l = l[1];
  2027.         }
  2028.         s.b += Std.string("}");
  2029.         return s.b;
  2030.     }
  2031.     ,iterator: function() {
  2032.         return { h : this.h, hasNext : function() {
  2033.             return this.h != null;
  2034.         }, next : function() {
  2035.             if(this.h == null) return null;
  2036.             var x = this.h[0];
  2037.             this.h = this.h[1];
  2038.             return x;
  2039.         }};
  2040.     }
  2041.     ,remove: function(v) {
  2042.         var prev = null;
  2043.         var l = this.h;
  2044.         while(l != null) {
  2045.             if(l[0] == v) {
  2046.                 if(prev == null) this.h = l[1]; else prev[1] = l[1];
  2047.                 if(this.q == l) this.q = prev;
  2048.                 this.length--;
  2049.                 return true;
  2050.             }
  2051.             prev = l;
  2052.             l = l[1];
  2053.         }
  2054.         return false;
  2055.     }
  2056.     ,clear: function() {
  2057.         this.h = null;
  2058.         this.q = null;
  2059.         this.length = 0;
  2060.     }
  2061.     ,isEmpty: function() {
  2062.         return this.h == null;
  2063.     }
  2064.     ,pop: function() {
  2065.         if(this.h == null) return null;
  2066.         var x = this.h[0];
  2067.         this.h = this.h[1];
  2068.         if(this.h == null) this.q = null;
  2069.         this.length--;
  2070.         return x;
  2071.     }
  2072.     ,last: function() {
  2073.         return this.q == null?null:this.q[0];
  2074.     }
  2075.     ,first: function() {
  2076.         return this.h == null?null:this.h[0];
  2077.     }
  2078.     ,push: function(item) {
  2079.         var x = [item,this.h];
  2080.         this.h = x;
  2081.         if(this.q == null) this.q = x;
  2082.         this.length++;
  2083.     }
  2084.     ,add: function(item) {
  2085.         var x = [item];
  2086.         if(this.h == null) this.h = x; else this.q[1] = x;
  2087.         this.q = x;
  2088.         this.length++;
  2089.     }
  2090.     ,__class__: List
  2091. }
  2092. var Main = function() { }
  2093. Main.__name__ = true;
  2094. Main.main = function() {
  2095.     if(js.Lib.document.getElementById("cvsBook") == null) Zoom.Load(); else RunTime.init();
  2096. }
  2097. Main.testCss = function() {
  2098.     var t = new core.Tweener();
  2099.     var max = 20;
  2100.     var cvs = js.Lib.document.getElementById("img");
  2101.     t.onChange = function(count) {
  2102.         var l = Std.string(count * 30);
  2103.         cvs.style.left = l;
  2104.     };
  2105.     t.start(max);
  2106. }
  2107. var core = core || {}
  2108. core.Book = function() {
  2109.     this.pages = new Array();
  2110.     this.hotlinks = new Array();
  2111.     this.videos = new Array();
  2112.     this.audios = new Array();
  2113.     this.buttons = new Array();
  2114.     this.highlights = new Array();
  2115.     this.notes = new Array();
  2116.     this.bookmarks = new Array();
  2117.     this.slideshows = new Array();
  2118.     this.bookId = "";
  2119.     this.bookTitle = "";
  2120.     this.analyticsUA = "";
  2121.     this.singlepageMode = false;
  2122.     this.rightToLeft = false;
  2123.     this.menuTocVisible = true;
  2124.     this.menuThumbsVisible = true;
  2125.     this.menuSearchVisible = true;
  2126.     this.menuAutoFlipVisible = true;
  2127.     this.menuZoomVisible = true;
  2128.     this.menuBookmarkVisible = true;
  2129.     this.menuNoteVisible = true;
  2130.     this.menuHighlightVisible = true;
  2131. };
  2132. core.Book.__name__ = true;
  2133. core.Book.prototype = {
  2134.     preloadPages: function(num) {
  2135.         if(num == null) num = 0;
  2136.         if(num < 0 || num > this.pages.length - 1) return;
  2137.         var p = [];
  2138.         p.push(num);
  2139.         p.push(num + 1);
  2140.         p.push(num - 1);
  2141.         p.push(num + 2);
  2142.         p.push(num - 2);
  2143.         p.push(num + 3);
  2144.         p.push(num - 3);
  2145.         p.push(num + 4);
  2146.         p.push(num + 5);
  2147.         var _g1 = 0, _g = p.length;
  2148.         while(_g1 < _g) {
  2149.             var i = _g1++;
  2150.             var index = p[i];
  2151.             if(index >= 0 && index < this.pages.length) {
  2152.                 var page = this.pages[index];
  2153.                 page.getImagePage();
  2154.                 page.loadBigImagePage();
  2155.             }
  2156.         }
  2157.     }
  2158.     ,__class__: core.Book
  2159. }
  2160. var RunTime = function() { }
  2161. RunTime.__name__ = true;
  2162. RunTime.alert = function(msg) {
  2163.     js.Lib.alert(msg);
  2164. }
  2165. RunTime.init = function() {
  2166.     if(js.Lib.window.navigator.userAgent.indexOf("Android") != -1) {
  2167.         var w = js.Lib.window;
  2168.         w.onorientationchange = RunTime.onOrientationChange;
  2169.     }
  2170.     RunTime.kvPrex = js.Lib.window.location.pathname.split("?")[0];
  2171.     RunTime.loadingLogo = js.Lib.document.getElementById("loadingLogo");
  2172.     RunTime.clientWidth = js.Lib.window.document.body.clientWidth;
  2173.     RunTime.clientHeight = js.Lib.window.document.body.clientHeight;
  2174.     RunTime.defaultPageNum = Std.parseInt(orc.utils.Util.getUrlParam("page"));
  2175.     var dom = js.Lib.document.getElementById("hiddenSearch");
  2176.     var html = dom.innerHTML;
  2177.     dom.innerHTML = "";
  2178.     RunTime.searchHtmlCache = html;
  2179.     dom = js.Lib.document.getElementById("hiddenInput");
  2180.     html = dom.innerHTML;
  2181.     dom.innerHTML = "";
  2182.     RunTime.inputHtmlCache = html;
  2183.     RunTime.bgImage = js.Lib.document.getElementById("bgImage");
  2184.     RunTime.divLoading = js.Lib.document.getElementById("loading");
  2185.     RunTime.divLoading.style.top = (RunTime.clientHeight - RunTime.divLoading.clientHeight) / 2 + "px";
  2186.     RunTime.divLoading.style.left = (RunTime.clientWidth - RunTime.divLoading.clientWidth) / 2 + "px";
  2187.     RunTime.divLoading.style.display = "inline";
  2188.     RunTime.preRequestBookInfo();
  2189. }
  2190. RunTime.onOrientationChange = function(e) {
  2191.     haxe.Timer.delay(RunTime.reLoadPage,1000);
  2192. }
  2193. RunTime.reLoadPage = function() {
  2194.     js.Lib.window.location.reload();
  2195. }
  2196. RunTime.loadState = function() {
  2197.     var bbv = true;
  2198.     var params = orc.utils.Util.getUrlParams();
  2199.     var _g1 = 0, _g = params.length;
  2200.     while(_g1 < _g) {
  2201.         var i = _g1++;
  2202.         var item = params[i];
  2203.         if(item.key == "page") {
  2204.             var num = Std.parseInt(item.value);
  2205.             RunTime.defaultPageNum = num;
  2206.         } else if(item.key == "bbv") {
  2207.             if(item.value == "1") bbv = true; else if(item.value == "0") bbv = false;
  2208.         } else if(item.key == "pcode") RunTime.pcode = item.value;
  2209.     }
  2210.     if(bbv == true) RunTime.flipBook.showBottomBar(); else RunTime.flipBook.hideBottomBar(null,false);
  2211. }
  2212. RunTime.requestLanguages = function(callbackFunc) {
  2213.     orc.utils.Util.request(RunTime.urlLang,function(data) {
  2214.         var xml = Xml.parse(data);
  2215.         var i = xml.elementsNamed("languages");
  2216.         if(i.hasNext() == false) return;
  2217.         xml = i.next();
  2218.         i = xml.elementsNamed("language");
  2219.         if(i.hasNext() == false) return;
  2220.         var dftLang = null;
  2221.         while(i.hasNext() == true) {
  2222.             var node = i.next();
  2223.             var lang = new core.LangCfg();
  2224.             var cnt = node.get("content");
  2225.             var dft = node.get("default");
  2226.             if(dftLang == null) dftLang = lang;
  2227.             lang.content = cnt;
  2228.             if(dft == "yes" || dft == "Yes" || dft == "YES") {
  2229.                 lang.isDefault = true;
  2230.                 dftLang = lang;
  2231.             }
  2232.             RunTime.languages.push(lang);
  2233.         }
  2234.         if(dftLang != null) {
  2235.             var urlLangResource = RunTime.urlRoot + "data/languages/" + dftLang.content + ".xml";
  2236.             L.loadRemote(urlLangResource,callbackFunc,callbackFunc);
  2237.         } else callbackFunc();
  2238.     },callbackFunc);
  2239. }
  2240. RunTime.preRequestBookInfo = function() {
  2241.     orc.utils.Util.request(RunTime.urlBookinfo,function(data) {
  2242.         RunTime.bookInfo = Xml.parse(data);
  2243.         RunTime.getBookInfo();
  2244.         if(RunTime.book.singlepageMode) {
  2245.             RunTime.flipBook = new FlipBook();
  2246.             RunTime.singlePage = true;
  2247.         } else if(RunTime.clientHeight > RunTime.clientWidth) {
  2248.             RunTime.flipBook = new FlipBook();
  2249.             RunTime.singlePage = true;
  2250.         } else {
  2251.             RunTime.flipBook = new DoubleFlipBook();
  2252.             RunTime.singlePage = false;
  2253.         }
  2254.         RunTime.flipBook.zoom = js.Lib.document.getElementById("zoom");
  2255.         var bookleftpage = js.Lib.document.getElementById("leftpage");
  2256.         RunTime.flipBook.zoomLeftPage = bookleftpage;
  2257.         var bookrightpage = js.Lib.document.getElementById("rightpage");
  2258.         RunTime.flipBook.zoomRightPage = bookrightpage;
  2259.         var leftPageLock = js.Lib.document.getElementById("leftPageLock");
  2260.         var rightPageLock = js.Lib.document.getElementById("rightPageLock");
  2261.         RunTime.flipBook.leftPageLock = leftPageLock;
  2262.         RunTime.flipBook.rightPageLock = rightPageLock;
  2263.         RunTime.flipBook.root = js.Lib.document.getElementById("cvsBook");
  2264.         RunTime.flipBook.mask = js.Lib.document.getElementById("mask");
  2265.         RunTime.flipBook.tbPageCount = js.Lib.document.getElementById("tbPageCount");
  2266.         RunTime.flipBook.tbPage = js.Lib.document.getElementById("tbPage");
  2267.         RunTime.flipBook.btnContents = js.Lib.document.getElementById("btnContents");
  2268.         RunTime.flipBook.btnThumbs = js.Lib.document.getElementById("btnThumbs");
  2269.         RunTime.flipBook.btnSearch = js.Lib.document.getElementById("btnSearch");
  2270.         RunTime.flipBook.btnMask = js.Lib.document.getElementById("btnMask");
  2271.         RunTime.flipBook.btnBookMark = js.Lib.document.getElementById("btnBookMark");
  2272.         RunTime.flipBook.btnNote = js.Lib.document.getElementById("btnNote");
  2273.         RunTime.flipBook.btnAboutUs = js.Lib.document.getElementById("btnAboutUs");
  2274.         RunTime.flipBook.btnPrevPage = js.Lib.document.getElementById("btnPrevPage");
  2275.         RunTime.flipBook.btnNextPage = js.Lib.document.getElementById("btnNextPage");
  2276.         RunTime.flipBook.btnFirstPage = js.Lib.document.getElementById("btnFirstPage");
  2277.         RunTime.flipBook.btnLastPage = js.Lib.document.getElementById("btnLastPage");
  2278.         RunTime.flipBook.btnAutoFlip = js.Lib.document.getElementById("btnAutoFlip");
  2279.         RunTime.flipBook.btnDownload = js.Lib.document.getElementById("btnDownload");
  2280.         RunTime.flipBook.btnEmail = js.Lib.document.getElementById("btnEmail");
  2281.         RunTime.flipBook.btnSns = js.Lib.document.getElementById("btnSns");
  2282.         RunTime.flipBook.btnShowTxt = js.Lib.document.getElementById("btnShowTxt");
  2283.         RunTime.flipBook.imgLogo = js.Lib.document.getElementById("imgLogo");
  2284.         RunTime.flipBook.topBar = js.Lib.document.getElementById("topBar");
  2285.         RunTime.flipBook.topBarContent = js.Lib.document.getElementById("topBarContent");
  2286.         RunTime.flipBook.topFullTextContent = js.Lib.document.getElementById("topFullTextContent");
  2287.         RunTime.flipBook.bottomBar = js.Lib.document.getElementById("bottomBar");
  2288.         RunTime.flipBook.bottomBarBg = js.Lib.document.getElementById("bottomBarBg");
  2289.         RunTime.flipBook.bottomBarBg.style.opacity = RunTime.bottomBarAlpha;
  2290.         RunTime.flipBook.topMenuBar = js.Lib.document.getElementById("topMenuBar");
  2291.         RunTime.flipBook.topMenuBarBg = js.Lib.document.getElementById("topMenuBarBg");
  2292.         RunTime.flipBook.topMenuBarBg.style.opacity = RunTime.bottomBarAlpha;
  2293.         RunTime.flipBook.topBarContent.style.zIndex = 10000;
  2294.         RunTime.flipBook.menuParent = js.Lib.document.getElementById("menuParent");
  2295.         RunTime.flipBook.maskPopup = js.Lib.document.getElementById("maskPopup");
  2296.         RunTime.flipBook.cvsSlideshow = js.Lib.document.getElementById("cvsSlideshow");
  2297.         RunTime.flipBook.cvsVideo = js.Lib.document.getElementById("cvsVideo");
  2298.         RunTime.flipBook.cvsOthers = js.Lib.document.getElementById("cvsOthers");
  2299.         RunTime.flipBook.cvsAudio = js.Lib.document.getElementById("cvsAudio");
  2300.         RunTime.flipBook.cvsLeftPageBgAudio = js.Lib.document.getElementById("cvsLeftPageBgAudio");
  2301.         RunTime.flipBook.cvsRightPageBgAudio = js.Lib.document.getElementById("cvsRightPageBgAudio");
  2302.         RunTime.flipBook.cvsYoutube = js.Lib.document.getElementById("cvsYoutube");
  2303.         RunTime.flipBook.btnZoom = js.Lib.document.getElementById("btnZoom");
  2304.         var left = (RunTime.clientWidth - 500) / 2 | 0;
  2305.         RunTime.flipBook.topBar.style.left = Std.string(left) + "px";
  2306.         var c = RunTime.flipBook.root;
  2307.         RunTime.flipBook.canvas = c;
  2308.         RunTime.flipBook.attachActions();
  2309.         var t = js.Lib.window.navigator.userAgent;
  2310.         if(t.indexOf("CPU iPhone OS ") != -1) {
  2311.             var iosVar = HxOverrides.substr(t,t.indexOf("CPU iPhone OS ") + 14,1);
  2312.             if(iosVar == "7") {
  2313.                 if(RunTime.clientWidth >= 480) RunTime.clientHeight -= 60;
  2314.             }
  2315.         }
  2316.         c.width = RunTime.clientWidth;
  2317.         c.height = RunTime.clientHeight;
  2318.         if(RunTime.clientWidth < 800) {
  2319.             js.Lib.document.getElementById("btnFirstPage").style.marginLeft = "10px";
  2320.             js.Lib.document.getElementById("btnPrevPage").style.marginLeft = "10px";
  2321.             js.Lib.document.getElementById("btnNextPage").style.marginLeft = "10px";
  2322.             js.Lib.document.getElementById("btnLastPage").style.marginLeft = "10px";
  2323.         }
  2324.         var cvsButton = js.Lib.document.getElementById("cvsButton");
  2325.         RunTime.flipBook.cvsButton = cvsButton;
  2326.         var cvsHighLight = js.Lib.document.getElementById("cvsHighLight");
  2327.         RunTime.flipBook.cvsHighLight = cvsHighLight;
  2328.         var cvsNote = js.Lib.document.getElementById("cvsNote");
  2329.         RunTime.flipBook.cvsNote = cvsNote;
  2330.         var cvsBookmark = js.Lib.document.getElementById("cvsBookmark");
  2331.         RunTime.flipBook.cvsBookmark = cvsBookmark;
  2332.         RunTime.flipBook.zoom.style.width = RunTime.clientWidth + "px";
  2333.         RunTime.flipBook.zoom.style.height = RunTime.clientHeight + "px";
  2334.         RunTime.flipBook.afterInit();
  2335.         RunTime.flipBook.bookContext.ctx = RunTime.flipBook.getContext();
  2336.         RunTime.flipBook.bookContext.ctxButton = RunTime.flipBook.getButtonContext();
  2337.         RunTime.flipBook.bookContext.ctxHighLight = RunTime.flipBook.getHighLightContext();
  2338.         RunTime.flipBook.bookContext.ctxNote = RunTime.flipBook.getNoteContext();
  2339.         RunTime.flipBook.bookContext.ctxBookmark = RunTime.flipBook.getBookmarkContext();
  2340.         RunTime.requestLanguages(RunTime.requestBookInfo);
  2341.         RunTime.showCvs();
  2342.     });
  2343. }
  2344. RunTime.showCvs = function() {
  2345.     RunTime.flipBook.cvsButton.style.visibility = "visible";
  2346.     RunTime.flipBook.cvsHighLight.style.visibility = "visible";
  2347.     RunTime.flipBook.cvsNote.style.visibility = "visible";
  2348.     RunTime.flipBook.cvsBookmark.style.visibility = "visible";
  2349.     RunTime.flipBook.cvsButton.width = RunTime.clientWidth | 0;
  2350.     RunTime.flipBook.cvsButton.height = RunTime.clientHeight | 0;
  2351.     RunTime.flipBook.cvsHighLight.width = RunTime.clientWidth | 0;
  2352.     RunTime.flipBook.cvsHighLight.height = RunTime.clientHeight | 0;
  2353.     RunTime.flipBook.cvsNote.width = RunTime.clientWidth | 0;
  2354.     RunTime.flipBook.cvsNote.height = RunTime.clientHeight | 0;
  2355.     RunTime.flipBook.cvsBookmark.width = RunTime.clientWidth | 0;
  2356.     RunTime.flipBook.cvsBookmark.height = RunTime.clientHeight | 0;
  2357. }
  2358. RunTime.hideCvs = function() {
  2359.     RunTime.flipBook.cvsButton.style.visibility = "hidden";
  2360.     RunTime.flipBook.cvsHighLight.style.visibility = "hidden";
  2361.     RunTime.flipBook.cvsNote.style.visibility = "hidden";
  2362.     RunTime.flipBook.cvsBookmark.style.visibility = "hidden";
  2363.     RunTime.flipBook.cvsButton.width = 1;
  2364.     RunTime.flipBook.cvsButton.height = 1;
  2365.     RunTime.flipBook.cvsHighLight.width = 1;
  2366.     RunTime.flipBook.cvsHighLight.height = 1;
  2367.     RunTime.flipBook.cvsNote.width = 1;
  2368.     RunTime.flipBook.cvsNote.height = 1;
  2369.     RunTime.flipBook.cvsBookmark.width = 1;
  2370.     RunTime.flipBook.cvsBookmark.height = 1;
  2371. }
  2372. RunTime.requestBookInfo = function() {
  2373.     orc.utils.Util.request(RunTime.urlBookinfo,function(data) {
  2374.         RunTime.bookInfo = Xml.parse(data);
  2375.         RunTime.loadBookInfo();
  2376.         RunTime.key = RunTime.calcKey(RunTime.book.pageWidth | 0,RunTime.book.pageHeight | 0);
  2377.         var defaultKey = "Pwd-Empty";
  2378.         if(RunTime.pcode.length > 0) defaultKey = RunTime.decode64(RunTime.pcode);
  2379.         var encode = RunTime.encryptKey(defaultKey,RunTime.key);
  2380.         if(encode == RunTime.book.password) {
  2381.             if(encode == RunTime.book.password && RunTime.pcode.length > 0) RunTime.bLocked = false;
  2382.             RunTime.afterRequestBookInfo();
  2383.         } else if(RunTime.book.lockPages != null) {
  2384.             if(RunTime.book.lockPages.length > 0) {
  2385.                 if(encode == RunTime.book.password && RunTime.pcode.length > 0) RunTime.bLocked = false;
  2386.                 RunTime.afterRequestBookInfo();
  2387.             }
  2388.         } else RunTime.InputPwd();
  2389.         if(!RunTime.singlePage) RunTime.flipBook.requestMainAd();
  2390.         RunTime.hideLoadingLogo();
  2391.     });
  2392. }
  2393. RunTime.onResize = function(e) {
  2394. }
  2395. RunTime.InputPwd = function() {
  2396.     RunTime.showPopupMaskLayer();
  2397.     RunTime.flipBook.cvsOthers.innerHTML = core.HtmlHelper.toInputPwdHtml();
  2398. }
  2399. RunTime.InputUnlock = function() {
  2400.     RunTime.showPopupMaskLayer();
  2401.     RunTime.flipBook.cvsOthers.innerHTML = core.HtmlHelper.toInputUnlockPwdHtml();
  2402. }
  2403. RunTime.tryPwd = function(pwd) {
  2404.     var encode = RunTime.encryptKey(pwd,RunTime.key);
  2405.     if(encode == RunTime.book.password) {
  2406.         RunTime.pcode = StringTools.urlEncode(RunTime.encode64(pwd,false));
  2407.         RunTime.afterRequestBookInfo();
  2408.     } else js.Lib.window.alert(L.s("PasswordError"));
  2409. }
  2410. RunTime.tryUnlock = function(pwd) {
  2411.     var encode = RunTime.encryptKey(pwd,RunTime.key);
  2412.     if(encode == RunTime.book.password) {
  2413.         RunTime.pcode = StringTools.urlEncode(RunTime.encode64(pwd,false));
  2414.         js.Lib.document.getElementById("inputBox").style.display = "none";
  2415.         RunTime.clearPopupContents();
  2416.         RunTime.bLocked = false;
  2417.         RunTime.flipBook.leftPageLock.style.display = "none";
  2418.         RunTime.flipBook.rightPageLock.style.display = "none";
  2419.         RunTime.flipBook.bookContext.render();
  2420.     } else js.Lib.window.alert(L.s("PasswordError"));
  2421. }
  2422. RunTime.afterRequestBookInfo = function() {
  2423.     RunTime.flipBook.cvsOthers.innerHTML = "";
  2424.     RunTime.clearPopupContents();
  2425.     RunTime.requestPages();
  2426.     RunTime.useAnalyticsUA(RunTime.book.analyticsUA,RunTime.book.bookId);
  2427. }
  2428. RunTime.requestPages = function() {
  2429.     orc.utils.Util.request(RunTime.urlPageInfo,function(data) {
  2430.         RunTime.pageInfo = Xml.parse(data);
  2431.         RunTime.loadPageInfo();
  2432.         RunTime.requestHotlinks();
  2433.         RunTime.requestSlideshow();
  2434.         RunTime.requestContents();
  2435.         RunTime.requestShare();
  2436.         RunTime.requestAbout();
  2437.         RunTime.requestVideos();
  2438.         RunTime.reauestAudios();
  2439.         RunTime.requestButtons();
  2440.         RunTime.readLocalHighLights();
  2441.         RunTime.readLocalNotes();
  2442.         RunTime.requestBookmark();
  2443.         RunTime.readLocalBookmarks();
  2444.     });
  2445. }
  2446. RunTime.requestSlideshow = function(onSuccess) {
  2447.     orc.utils.Util.request(RunTime.urlSlideshow,function(data) {
  2448.         var dom = new DOMParser();
  2449.         var ctx = new Xml2Html();
  2450.         RunTime.slideshow = dom.parseFromString(ctx.prepareXmlAsHtml(data),"text/xml");
  2451.         RunTime.loadSlideshow(ctx);
  2452.         if(RunTime.flipBook != null) {
  2453.             RunTime.flipBook.loadCtxSlideshow();
  2454.             RunTime.flipBook.bookContext.render();
  2455.         }
  2456.         if(onSuccess != null) onSuccess();
  2457.     });
  2458. }
  2459. RunTime.requestHotlinks = function(onSuccess) {
  2460.     orc.utils.Util.request(RunTime.urlHotlinks,function(data) {
  2461.         var dom = new DOMParser();
  2462.         var ctx = new Xml2Html();
  2463.         RunTime.hotlinkInfo = dom.parseFromString(ctx.prepareXmlAsHtml(data),"text/xml");
  2464.         RunTime.loadHotlinks(ctx);
  2465.         if(RunTime.flipBook != null) {
  2466.             RunTime.flipBook.loadCtxHotlinks();
  2467.             RunTime.flipBook.bookContext.render();
  2468.         }
  2469.         if(onSuccess != null) onSuccess();
  2470.     });
  2471. }
  2472. RunTime.requestVideos = function(onSuccess) {
  2473.     orc.utils.Util.request(RunTime.urlVideos,function(data) {
  2474.         RunTime.videoInfo = Xml.parse(data);
  2475.         RunTime.loadVideos();
  2476.         if(RunTime.flipBook != null) {
  2477.             RunTime.flipBook.updateVideos();
  2478.             RunTime.flipBook.bookContext.render();
  2479.         }
  2480.         if(onSuccess != null) onSuccess();
  2481.     });
  2482. }
  2483. RunTime.reauestAudios = function(onSuccess) {
  2484.     orc.utils.Util.request(RunTime.urlAudios,function(data) {
  2485.         RunTime.audioInfo = Xml.parse(data);
  2486.         RunTime.loadAudios();
  2487.         if(RunTime.flipBook != null) RunTime.flipBook.updateAudios();
  2488.         if(onSuccess != null) onSuccess();
  2489.     });
  2490. }
  2491. RunTime.requestButtons = function(onSuccess) {
  2492.     orc.utils.Util.request(RunTime.urlButtons,function(data) {
  2493.         RunTime.buttonInfo = Xml.parse(data);
  2494.         RunTime.loadButtons();
  2495.         if(RunTime.flipBook != null) {
  2496.             RunTime.flipBook.loadCtxButtons();
  2497.             RunTime.flipBook.bookContext.render();
  2498.         }
  2499.         if(onSuccess != null) onSuccess();
  2500.     });
  2501. }
  2502. RunTime.requestContents = function() {
  2503.     orc.utils.Util.request(RunTime.urlContents,function(data) {
  2504.         RunTime.contentInfo = Xml.parse(data);
  2505.     });
  2506. }
  2507. RunTime.requestShare = function() {
  2508.     orc.utils.Util.request(RunTime.urlShareInfo,function(data) {
  2509.         RunTime.shareInfo = Xml.parse(data);
  2510.     });
  2511. }
  2512. RunTime.requestAbout = function() {
  2513.     orc.utils.Util.request(RunTime.urlAbout,function(data) {
  2514.         RunTime.aboutInfo = Xml.parse(data);
  2515.     });
  2516. }
  2517. RunTime.requestSearch = function(invoke) {
  2518.     orc.utils.Util.request(RunTime.urlSearch,function(data) {
  2519.         var dom = new DOMParser();
  2520.         var ctx = new Xml2Html();
  2521.         RunTime.searchInfo = dom.parseFromString(ctx.prepareXmlAsHtml(data),"text/xml");
  2522.         RunTime.loadPageContents(ctx);
  2523.         if(invoke != null) invoke(RunTime.book.pages);
  2524.     });
  2525. }
  2526. RunTime.requestBookmark = function() {
  2527.     orc.utils.Util.request(RunTime.urlBookmarks,function(data) {
  2528.         RunTime.bookmarkInfo = Xml.parse(data);
  2529.         var it = RunTime.bookmarkInfo.firstElement().elementsNamed("bookmark");
  2530.         do {
  2531.             var node = it.next();
  2532.             if(node == null) break;
  2533.             var bk = new core.Bookmark();
  2534.             bk.pageNum = node.get("page");
  2535.             bk.text = node.get("content");
  2536.             bk.onlyread = true;
  2537.             RunTime.book.bookmarks.push(bk);
  2538.         } while(it.hasNext());
  2539.     });
  2540. }
  2541. RunTime.invokePageContentsAction = function(invoke) {
  2542.     if(RunTime.searchInfo == null) RunTime.requestSearch(invoke); else invoke(RunTime.book.pages);
  2543. }
  2544. RunTime.loadPageContents = function(ctx) {
  2545.     if(RunTime.searchInfo == null) return;
  2546.     var dom = RunTime.searchInfo;
  2547.     var pages = dom.getElementsByTagName("page");
  2548.     var _g1 = 0, _g = pages.length;
  2549.     while(_g1 < _g) {
  2550.         var i = _g1++;
  2551.         var node = pages[i];
  2552.         var pageNumVal = node.getAttribute("pageNumber");
  2553.         var htmlText = null;
  2554.         var htmlTextDoms = node.getElementsByTagName("cdata");
  2555.         if(htmlTextDoms != null && htmlTextDoms.length > 0) {
  2556.             htmlText = StringTools.trim(htmlTextDoms[0].childNodes[0].nodeValue);
  2557.             htmlText = ctx.getCData(htmlText);
  2558.         }
  2559.         var _g3 = 0, _g2 = RunTime.book.pages.length;
  2560.         while(_g3 < _g2) {
  2561.             var k = _g3++;
  2562.             var page = RunTime.book.pages[k];
  2563.             if(page.id == pageNumVal) page.content = htmlText;
  2564.         }
  2565.     }
  2566. }
  2567. RunTime.showLoadingLogo = function(loadingUrl) {
  2568.     if(loadingUrl == null || loadingUrl == "") return;
  2569.     RunTime.loadingLogo.innerHTML = "<img src='" + loadingUrl + "'>";
  2570.     RunTime.loadingLogo.style.top = (RunTime.clientHeight - RunTime.loadingLogo.clientHeight) / 2 + "px";
  2571.     RunTime.loadingLogo.style.left = (RunTime.clientWidth - RunTime.loadingLogo.clientWidth) / 2 + "px";
  2572.     RunTime.loadingLogo.style.display = "inline";
  2573. }
  2574. RunTime.hideLoadingLogo = function() {
  2575.     RunTime.loadingLogo.innerHTML = "";
  2576.     RunTime.loadingLogo.style.display = "none";
  2577. }
  2578. RunTime.reload = function() {
  2579.     js.Lib.window.location.href = RunTime.flipBook.getFullUrl();
  2580. }
  2581. RunTime.navigateUrl = function(url) {
  2582.     if(url == null || url == "null" || url == "") return;
  2583.     js.Lib.window.location.href = url;
  2584. }
  2585. RunTime.showAsButtonClick = function(t) {
  2586.     var newMask = js.Lib.document.createElement("div");
  2587.     newMask.id = "newMask";
  2588.     newMask.style.position = "absolute";
  2589.     newMask.style.zIndex = 100;
  2590.     newMask.style.width = js.Lib.document.body.scrollWidth + "px";
  2591.     newMask.style.height = js.Lib.document.body.scrollHeight + "px";
  2592.     newMask.style.top = "0px";
  2593.     newMask.style.left = "0px";
  2594.     newMask.style.background = "#000";
  2595.     newMask.style.opacity = 0.50;
  2596.     js.Lib.document.body.appendChild(newMask);
  2597.     js.Lib.document.getElementById("cvsOthers").innerHTML = RunTime.slideshowPopupHtml;
  2598.     js.Lib.document.getElementById("popupSlideshow").style.cssText += " -moz-transform: scale(1);-moz-transition: width 0.5s ease-out; -webkit-transform: scale(1); -webkit-transition: 0.5s ease-out; ";
  2599. }
  2600. RunTime.clearSlideshowContents = function() {
  2601.     js.Lib.document.body.removeChild(js.Lib.document.getElementById("newMask"));
  2602. }
  2603. RunTime.getBookInfo = function() {
  2604.     if(RunTime.bookInfo == null) return;
  2605.     var i = RunTime.bookInfo.elementsNamed("bookinfo");
  2606.     if(i.hasNext() == false) return;
  2607.     var node = i.next();
  2608.     RunTime.showLoadingLogo(node.get("loadingLogo"));
  2609.     RunTime.book.singlepageMode = node.get("singlepageMode") == "true"?true:false;
  2610.     RunTime.book.rightToLeft = node.get("rightToLeft") == "true"?true:false;
  2611.     RunTime.book.autoFlipSecond = Std.parseInt(node.get("autoFlipSeconds"));
  2612.     RunTime.book.gateway = node.get("gateway");
  2613.     RunTime.book.shareHref = node.get("shareUrl");
  2614. }
  2615. RunTime.loadBookInfo = function() {
  2616.     if(RunTime.bookInfo == null) return;
  2617.     var i = RunTime.bookInfo.elementsNamed("bookinfo");
  2618.     if(i.hasNext() == false) return;
  2619.     var node = i.next();
  2620.     var idVal = node.get("id");
  2621.     if(idVal == null) idVal = "";
  2622.     RunTime.book.bookId = idVal;
  2623.     RunTime.book.bookTitle = node.get("title");
  2624.     RunTime.book.bgColor = node.get("bgColor");
  2625.     RunTime.book.bgImageUrl = node.get("bgImage");
  2626.     RunTime.book.analyticsUA = node.get("analyticsUA");
  2627.     RunTime.book.password = node.get("password");
  2628.     RunTime.book.bookDownloadUrl = node.get("pdfUrl");
  2629.     var locked = node.get("protectedPages");
  2630.     if(locked != null && locked != "") RunTime.book.lockPages = locked.split(",");
  2631.     if(RunTime.book.bgColor == "" || RunTime.book.bgColor == null) RunTime.book.bgColor = "gray";
  2632.     if(RunTime.book.bgColor != "" && RunTime.book.bgColor != null) js.Lib.document.body.style.backgroundColor = RunTime.book.bgColor;
  2633.     if(RunTime.book.bgImageUrl != "" && RunTime.book.bgImageUrl != null) {
  2634.         js.Lib.document.body.style.backgroundImage = "url(" + RunTime.book.bgImageUrl + ")";
  2635.         js.Lib.document.body.style.backgroundRepeat = "no-repeat";
  2636.         js.Lib.document.body.style.backgroundPosition = "center";
  2637.         js.Lib.document.body.style.backgroundSize = "cover";
  2638.         js.Lib.document.body.style.backgroundClip = "border-box";
  2639.     }
  2640.     js.Lib.window.document.title = RunTime.book.bookTitle;
  2641.     var pageWidth = Std.parseFloat(node.get("pageWidth"));
  2642.     var pageHeight = Std.parseFloat(node.get("pageHeight"));
  2643.     RunTime.book.pageWidth = pageWidth;
  2644.     RunTime.book.pageHeight = pageHeight;
  2645.     var m = new orc.utils.ImageMetricHelper(pageWidth,pageHeight);
  2646.     var w = RunTime.clientWidth;
  2647.     var h = RunTime.clientHeight;
  2648.     var scale = m.getMaxFitScale(w,h);
  2649.     RunTime.defaultScale = scale;
  2650.     RunTime.imagePageWidth = pageWidth * scale;
  2651.     RunTime.imagePageHeight = pageHeight * scale;
  2652.     RunTime.pageScale = scale;
  2653.     var li = node.elementsNamed("bookLogo");
  2654.     if(li.hasNext() == true) {
  2655.         var lnode = li.next();
  2656.         RunTime.book.logoUrl = lnode.get("url");
  2657.         RunTime.book.logoHref = lnode.get("href");
  2658.     }
  2659.     if(RunTime.book.logoUrl != null && RunTime.book.logoUrl != "") {
  2660.         var hideLogo = false;
  2661.         if(RunTime.clientWidth < 600) hideLogo = true;
  2662.         if(js.Lib.window.navigator.userAgent.indexOf("iPhone") != -1) hideLogo = true;
  2663.         if(!hideLogo) {
  2664.             RunTime.flipBook.imgLogo.style.display = "inline";
  2665.             var obj = RunTime.flipBook.imgLogo;
  2666.             obj.src = RunTime.book.logoUrl;
  2667.             RunTime.flipBook.imgLogo.onclick = RunTime.onLogoClick;
  2668.         }
  2669.     }
  2670.     RunTime.flipBook.btnDownload.onclick = RunTime.onDownloadClick;
  2671.     var bottomMenuIter = node.elementsNamed("bottommenu");
  2672.     if(bottomMenuIter.hasNext() == true) {
  2673.         var bottomMenuNode = bottomMenuIter.next();
  2674.         RunTime.book.menuAutoFlipVisible = RunTime.getMenuVisible(bottomMenuNode,"autoflip");
  2675.         RunTime.book.menuSearchVisible = RunTime.getMenuVisible(bottomMenuNode,"search");
  2676.         if(bottomMenuNode.elementsNamed("text").hasNext()) RunTime.book.menuTxtVisible = RunTime.getMenuVisible(bottomMenuNode,"text"); else RunTime.book.menuTxtVisible = RunTime.getMenuVisible(bottomMenuNode,"txt");
  2677.         RunTime.book.menuZoomVisible = RunTime.getMenuVisible(bottomMenuNode,"zoom");
  2678.         RunTime.book.menuBookmarkVisible = RunTime.getMenuVisible(bottomMenuNode,"bookmark");
  2679.         RunTime.book.menuNoteVisible = RunTime.getMenuVisible(bottomMenuNode,"notes");
  2680.         RunTime.book.menuHighlightVisible = RunTime.getMenuVisible(bottomMenuNode,"highlight");
  2681.     }
  2682.     var leftMenuIter = node.elementsNamed("leftmenu");
  2683.     if(leftMenuIter.hasNext() == true) {
  2684.         var leftMenuNode = leftMenuIter.next();
  2685.         RunTime.book.menuTocVisible = RunTime.getMenuVisible(leftMenuNode,"toc");
  2686.         RunTime.book.menuThumbsVisible = RunTime.getMenuVisible(leftMenuNode,"thumbs");
  2687.         RunTime.book.menuDownloadVisible = RunTime.getMenuEntirePDF(leftMenuNode,"pdf");
  2688.         RunTime.book.menuEmailVisible = RunTime.getMenuVisible(leftMenuNode,"email");
  2689.         RunTime.book.menuSnsVisible = RunTime.getMenuVisible(leftMenuNode,"sns");
  2690.         RunTime.book.menuAboutUsVisible = RunTime.getMenuVisible(leftMenuNode,"about");
  2691.     }
  2692.     var menuArray = [RunTime.flipBook.btnContents,RunTime.flipBook.btnThumbs,RunTime.flipBook.btnSearch,RunTime.flipBook.btnShowTxt,RunTime.flipBook.btnMask,RunTime.flipBook.btnBookMark,RunTime.flipBook.btnAutoFlip,RunTime.flipBook.btnEmail,RunTime.flipBook.btnSns,RunTime.flipBook.btnAboutUs];
  2693.     var showArray = [RunTime.book.menuTocVisible,RunTime.book.menuThumbsVisible,RunTime.book.menuSearchVisible,RunTime.book.menuTxtVisible,RunTime.book.menuHighlightVisible,RunTime.book.menuBookmarkVisible,RunTime.book.menuAutoFlipVisible,RunTime.book.menuEmailVisible,RunTime.book.menuSnsVisible,RunTime.book.menuAboutUsVisible];
  2694.     var menuCount = 10;
  2695.     var t = js.Lib.window.navigator.userAgent;
  2696.     if(t.indexOf("CPU iPhone OS ") != -1) {
  2697.         var iosVar = HxOverrides.substr(t,t.indexOf("CPU iPhone OS ") + 14,1);
  2698.         if(iosVar == "7") {
  2699.         }
  2700.         if(RunTime.clientWidth >= 480) menuCount = 6; else menuCount = 4;
  2701.     } else if(RunTime.clientWidth < 480) menuCount = 5; else if(RunTime.clientWidth == 480) menuCount = 7; else menuCount = 9;
  2702.     var i1 = 0;
  2703.     while(i1 < menuCount) {
  2704.         RunTime.setMenuVisible(menuArray[i1],showArray[i1]);
  2705.         i1++;
  2706.     }
  2707.     RunTime.loadState();
  2708. }
  2709. RunTime.setMenuVisible = function(menu,visible) {
  2710.     if(visible == true) menu.style.display = "inline"; else try {
  2711.         RunTime.flipBook.menuParent.removeChild(menu);
  2712.     } catch( e ) {
  2713.     }
  2714. }
  2715. RunTime.getMenuVisible = function(parent,nodeName) {
  2716.     var li = parent.elementsNamed(nodeName);
  2717.     if(li.hasNext() == true) {
  2718.         var lnode = li.next();
  2719.         if(lnode.get("visible") == "false") return false;
  2720.     }
  2721.     return true;
  2722. }
  2723. RunTime.getMenuEntirePDF = function(parent,nodeName) {
  2724.     var li = parent.elementsNamed(nodeName);
  2725.     if(li.hasNext() == true) {
  2726.         var lnode = li.next();
  2727.         if(lnode.get("entirePDF") == "true") return true;
  2728.     }
  2729.     return false;
  2730. }
  2731. RunTime.onLogoClick = function(e) {
  2732.     if(RunTime.book == null || RunTime.book.logoHref == null || RunTime.book.logoHref == "") return;
  2733.     js.Lib.window.location.href = RunTime.book.logoHref;
  2734. }
  2735. RunTime.onDownloadClick = function(e) {
  2736.     if(RunTime.book == null || RunTime.book.bookDownloadUrl == null || RunTime.book.bookDownloadUrl == "") return;
  2737.     js.Lib.window.location.href = RunTime.book.bookDownloadUrl;
  2738. }
  2739. RunTime.onSendEmail = function() {
  2740.     RunTime.sendEmailByService();
  2741. }
  2742. RunTime.sendEmailResult = function() {
  2743.     if(RunTime.sendService.responseText.length < 2) {
  2744.         js.Lib.alert(L.s("EmailSendSuccessful"));
  2745.         var tomail = js.Lib.window.document.getElementById("tomail");
  2746.         tomail.value = "";
  2747.         var frommail = js.Lib.window.document.getElementById("youremail");
  2748.         frommail.value = "";
  2749.         var n = js.Lib.window.document.getElementById("yname");
  2750.         n.value = "";
  2751.         var m = js.Lib.window.document.getElementById("sharemsg");
  2752.         m.value = "";
  2753.     } else js.Lib.alert(L.s("EmailSendFailed"));
  2754. }
  2755. RunTime.sendEmailByService = function() {
  2756.     var baseUrl = js.Lib.window.location.href.split("?")[0];
  2757.     baseUrl = baseUrl.substring(0,baseUrl.lastIndexOf("/"));
  2758.     var tomail = js.Lib.window.document.getElementById("tomail");
  2759.     var frommail = js.Lib.window.document.getElementById("youremail");
  2760.     var n = js.Lib.window.document.getElementById("yname");
  2761.     var subject = L.s("YourFriend","YourFirend") + Std.string(n.value) + L.s("ShareEmailTitle","ShareEmailTitle");
  2762.     js.Lib.window.document.getElementById("subject").setAttribute("value",subject);
  2763.     var m = js.Lib.window.document.getElementById("sharemsg");
  2764.     var msg = m.value;
  2765.     msg += "<br /> <br /> " + Std.string(n.value) + L.s("ShareEmailContent") + "<a href='" + baseUrl + "/" + RunTime.book.shareHref + "' target='_black'>" + baseUrl + "/" + RunTime.book.shareHref + "<a/>" + "<br /> <br />" + "<a href='" + baseUrl + "/" + RunTime.book.shareHref + "' target='_black'>" + "<img src='" + baseUrl + "/" + RunTime.book.pages[0].urlThumb + "' >" + "<a/>";
  2766.     RunTime.sendService = new XMLHttpRequest();
  2767.     var query = "tomail=" + Std.string(tomail.value) + "&frommail=" + Std.string(frommail.value) + "&subject=" + subject + "&message=" + msg;
  2768.     RunTime.sendService.open("get",RunTime.book.gateway + "?" + query,true);
  2769.     RunTime.sendService.onreadystatechange = RunTime.sendEmailResult;
  2770.     RunTime.sendService.send();
  2771. }
  2772. RunTime.sendEmailByForm = function() {
  2773.     var n = js.Lib.window.document.getElementById("yname");
  2774.     var subject = L.s("YourFriend","YourFirend") + Std.string(n.value) + L.s("ShareEmailTitle","ShareEmailTitle");
  2775.     js.Lib.window.document.getElementById("subject").setAttribute("value",subject);
  2776.     var m = js.Lib.window.document.getElementById("sharemsg");
  2777.     var msg = m.value;
  2778.     msg += "<br /> <br /> " + Std.string(n.value) + L.s("ShareEmailContent") + "<a href='" + RunTime.book.shareHref + "' target='_black'>" + RunTime.book.shareHref + "<a/>" + "<br /> <br />" + "<a href='" + RunTime.book.shareHref + "' target='_black'>" + "<img src='" + RunTime.book.pages[0].urlThumb + "' >" + "<a/>";
  2779.     var b = js.Lib.window.document.getElementById("sendEmail");
  2780.     b.submit();
  2781. }
  2782. RunTime.loadPageInfo = function() {
  2783.     if(RunTime.pageInfo == null) return;
  2784.     var root = RunTime.pageInfo.firstElement();
  2785.     var val = root.get("preload");
  2786.     if(val.toLowerCase() == "true") RunTime.enablePreload = true;
  2787.     var i = root.elementsNamed("page");
  2788.     var num = 0;
  2789.     var numDouble = 0.1;
  2790.     while(i.hasNext() == true) {
  2791.         var node = i.next();
  2792.         var id = node.get("id");
  2793.         var source = node.get("source");
  2794.         var medium = node.get("medium");
  2795.         var thumb = node.get("thumb");
  2796.         var canZoom = !(node.get("canZoom") == "false");
  2797.         var page = new core.Page();
  2798.         RunTime.book.pages.push(page);
  2799.         if(medium == null || medium == "") medium = "content/medium/page" + Std.string(num + 1) + ".jpg";
  2800.         page.id = id;
  2801.         page.num = num;
  2802.         page.numInDoubleMode = Math.round(numDouble) | 0;
  2803.         page.urlPage = RunTime.urlRoot + medium;
  2804.         page.urlBigPage = RunTime.urlRoot + source;
  2805.         page.urlThumb = RunTime.urlRoot + thumb;
  2806.         page.urlFullPage = RunTime.urlRoot + source;
  2807.         page.canZoom = canZoom;
  2808.         page.locked = RunTime.checkLocked(num + 1);
  2809.         numDouble += 0.5;
  2810.         num++;
  2811.     }
  2812.     RunTime.flipBook.setPageCount(RunTime.book.pages.length);
  2813.     RunTime.flipBook.setCurrentPage(RunTime.defaultPageNum + 1);
  2814.     RunTime.flipBook.loadPage(RunTime.defaultPageNum);
  2815. }
  2816. RunTime.checkLocked = function(num) {
  2817.     if(RunTime.book.lockPages == null || RunTime.book.lockPages.length == 0) return false;
  2818.     var _g1 = 0, _g = RunTime.book.lockPages.length;
  2819.     while(_g1 < _g) {
  2820.         var i = _g1++;
  2821.         if(Std.parseInt(RunTime.book.lockPages[i]) == num) return true;
  2822.     }
  2823.     return false;
  2824. }
  2825. RunTime.loadSlideshow = function(ctx) {
  2826.     if(RunTime.slideshow == null) return;
  2827.     var dom = RunTime.slideshow;
  2828.     var slides = dom.getElementsByTagName("slideshow");
  2829.     var _g1 = 0, _g = slides.length;
  2830.     while(_g1 < _g) {
  2831.         var i = _g1++;
  2832.         var node = slides[i];
  2833.         var pageNumVal = node.getAttribute("page");
  2834.         var xVal = node.getAttribute("x");
  2835.         var yVal = node.getAttribute("y");
  2836.         var pagewidth = node.getAttribute("pagewidth");
  2837.         var showAsButton = node.getAttribute("showAsButton");
  2838.         var popupWidthVal = node.getAttribute("popupWidth");
  2839.         var popupHeightVal = node.getAttribute("popupHeight");
  2840.         var widthVal = node.getAttribute("width");
  2841.         var heightVal = node.getAttribute("height");
  2842.         var timeVal = node.getAttribute("time");
  2843.         var transitionVal = node.getAttribute("transition");
  2844.         var idVal = node.getAttribute("sid");
  2845.         var bgColorVal = node.getAttribute("bgColor");
  2846.         var slideshowInfo = new core.SlideshowInfo();
  2847.         var pics = node.getElementsByTagName("pic");
  2848.         var _g3 = 0, _g2 = pics.length;
  2849.         while(_g3 < _g2) {
  2850.             var j = _g3++;
  2851.             var pnode = pics[j];
  2852.             var slide = new core.Slide();
  2853.             slide.url = RunTime.urlRoot + pnode.getAttribute("url");
  2854.             slide.href = pnode.getAttribute("href");
  2855.             slideshowInfo.slides.push(slide);
  2856.         }
  2857.         slideshowInfo.pageNum = Std.parseInt(pageNumVal) - 1;
  2858.         slideshowInfo.x = Std.parseFloat(xVal);
  2859.         slideshowInfo.y = Std.parseFloat(yVal);
  2860.         slideshowInfo.pagewidth = Std.parseFloat(pagewidth);
  2861.         slideshowInfo.showAsButton = showAsButton == "true"?true:false;
  2862.         if(popupWidthVal != null) slideshowInfo.popupWidth = Std.parseFloat(popupWidthVal);
  2863.         if(popupHeightVal != null) slideshowInfo.popupHeight = Std.parseFloat(popupHeightVal);
  2864.         slideshowInfo.width = Std.parseFloat(widthVal);
  2865.         slideshowInfo.height = Std.parseFloat(heightVal);
  2866.         slideshowInfo.interval = timeVal;
  2867.         slideshowInfo.transition = transitionVal;
  2868.         if(idVal == null) idVal = "sId_" + i;
  2869.         slideshowInfo.id = idVal;
  2870.         slideshowInfo.bgColor = bgColorVal;
  2871.         RunTime.book.slideshows.push(slideshowInfo);
  2872.     }
  2873. }
  2874. RunTime.loadHotlinks = function(ctx) {
  2875.     if(RunTime.hotlinkInfo == null) return;
  2876.     var dom = RunTime.hotlinkInfo;
  2877.     var links = dom.getElementsByTagName("hotlink");
  2878.     var _g1 = 0, _g = links.length;
  2879.     while(_g1 < _g) {
  2880.         var i = _g1++;
  2881.         var node = links[i];
  2882.         var pageNumVal = node.getAttribute("page");
  2883.         var xVal = node.getAttribute("x");
  2884.         var yVal = node.getAttribute("y");
  2885.         var widthVal = node.getAttribute("width");
  2886.         var heightVal = node.getAttribute("height");
  2887.         var colorVal = node.getAttribute("color");
  2888.         var opacityVal = node.getAttribute("opacity");
  2889.         var destinationVal = node.getAttribute("destination");
  2890.         var typeVal = node.getAttribute("type");
  2891.         var popupWidthVal = node.getAttribute("popupWidth");
  2892.         var popupHeightVal = node.getAttribute("popupHeight");
  2893.         var youtubeIdVal = node.getAttribute("youtubeId");
  2894.         var target = node.getAttribute("target");
  2895.         var window_color = node.getAttribute("windowColor");
  2896.         var htmlText = null;
  2897.         var htmlTextDoms = node.getElementsByTagName("cdata");
  2898.         if(htmlTextDoms != null && htmlTextDoms.length > 0) {
  2899.             htmlText = StringTools.trim(htmlTextDoms[0].childNodes[0].nodeValue);
  2900.             htmlText = ctx.getCData(htmlText);
  2901.             if(htmlText != null) {
  2902.                 if(htmlText.indexOf("iframe") != -1) {
  2903.                     var dom1 = new DOMParser();
  2904.                     var newHtmlDom = dom1.parseFromString(htmlText,"text/xml");
  2905.                     var iframe = newHtmlDom.getElementsByTagName("iframe")[0];
  2906.                     if(iframe != null) htmlText = "<iframe src=\"" + iframe.getAttribute("src") + "\" frameborder=\"0\" style=\"width:100%;height:100%\" scrolling=\"yes\" ></iframe>";
  2907.                 }
  2908.             }
  2909.         }
  2910.         try {
  2911.             var iframe = node.getElementsByTagName("iframe")[0];
  2912.             if(iframe != null) htmlText = "<iframe src=\"" + iframe.getAttribute("src") + "\" frameborder=\"0\" style=\"width:100%;height:100%\" scrolling=\"yes\" ></iframe>";
  2913.         } catch( ex ) {
  2914.         }
  2915.         var link = new core.HotLink();
  2916.         link.pageNum = Std.parseInt(pageNumVal) - 1;
  2917.         link.x = Std.parseFloat(xVal);
  2918.         link.y = Std.parseFloat(yVal);
  2919.         link.width = Std.parseFloat(widthVal);
  2920.         link.height = Std.parseFloat(heightVal);
  2921.         link.htmlText = htmlText;
  2922.         if(popupWidthVal != null) link.popupWidth = Std.parseInt(popupWidthVal); else link.popupWidth = Std.parseInt(widthVal);
  2923.         if(popupHeightVal != null) link.popupHeight = Std.parseInt(popupHeightVal); else link.popupHeight = Std.parseInt(heightVal);
  2924.         link.youtubeId = youtubeIdVal;
  2925.         link.type = typeVal == null?"":typeVal;
  2926.         if(target != null) link.target = target == ""?"_blank":target;
  2927.         if(window_color != null) {
  2928.             window_color = StringTools.replace(window_color,"0x","#");
  2929.             link.window_color = window_color;
  2930.         }
  2931.         if(colorVal != null) {
  2932.             colorVal = StringTools.replace(colorVal,"0x","#");
  2933.             colorVal = StringTools.replace(colorVal,"0X","#");
  2934.             link.color = colorVal;
  2935.         }
  2936.         if(opacityVal != null) link.opacity = Std.parseFloat(opacityVal);
  2937.         if(destinationVal != null) link.destination = destinationVal;
  2938.         RunTime.book.hotlinks.push(link);
  2939.     }
  2940. }
  2941. RunTime.loadVideos = function() {
  2942.     if(RunTime.videoInfo == null) return;
  2943.     var index = 0;
  2944.     var i = RunTime.videoInfo.firstElement().elementsNamed("video");
  2945.     while(i.hasNext() == true) {
  2946.         var node = i.next();
  2947.         var pageNumVal = node.get("page");
  2948.         var xVal = node.get("x");
  2949.         var yVal = node.get("y");
  2950.         var widthVal = node.get("width");
  2951.         var heightVal = node.get("height");
  2952.         var autoPlayVal = node.get("autoPlay");
  2953.         var showControlVal = node.get("showControl");
  2954.         var autoRepeatVal = node.get("autoRepeat");
  2955.         var urlVal = node.get("url");
  2956.         var youtubeIdVal = node.get("youtubeId");
  2957.         var video = new core.VideoInfo();
  2958.         video.pageNum = Std.parseInt(pageNumVal) - 1;
  2959.         video.x = Std.parseFloat(xVal);
  2960.         video.y = Std.parseFloat(yVal);
  2961.         video.width = Std.parseFloat(widthVal);
  2962.         video.height = Std.parseFloat(heightVal);
  2963.         video.autoPlay = autoPlayVal == "true";
  2964.         video.showControl = showControlVal == "true";
  2965.         video.autoRepeat = autoRepeatVal == "true";
  2966.         video.url = RunTime.urlRoot + urlVal;
  2967.         video.youtubeId = youtubeIdVal;
  2968.         video.id = "video_embed_" + Std.string(index);
  2969.         RunTime.book.videos.push(video);
  2970.         index++;
  2971.     }
  2972. }
  2973. RunTime.loadAudios = function() {
  2974.     if(RunTime.audioInfo == null) return;
  2975.     var index = 0;
  2976.     var i = RunTime.audioInfo.firstElement().elementsNamed("pages");
  2977.     if(i.hasNext() == true) {
  2978.         var index1 = 0;
  2979.         i = i.next().elementsNamed("sound");
  2980.         while(i.hasNext() == true) {
  2981.             var node = i.next();
  2982.             var pageNumVal = node.get("pageNumber");
  2983.             var urlVal = node.get("url");
  2984.             var audio = new core.AudioInfo();
  2985.             audio.url = RunTime.urlRoot + urlVal;
  2986.             audio.pageNum = Std.parseInt(pageNumVal) - 1;
  2987.             audio.id = "audio_embed_" + Std.string(index1);
  2988.             index1++;
  2989.             RunTime.book.audios.push(audio);
  2990.         }
  2991.     }
  2992. }
  2993. RunTime.extractCData = function(txt) {
  2994.     if(txt == null) return null;
  2995.     var first = txt.indexOf("<![CDATA[");
  2996.     var last = txt.lastIndexOf("]]>");
  2997.     if(first < 0 || last < 0 || last < first) return null;
  2998.     return HxOverrides.substr(txt,first + "<![CDATA[".length,last - first - "<![CDATA[".length);
  2999. }
  3000. RunTime.loadButtons = function() {
  3001.     if(RunTime.buttonInfo == null) return;
  3002.     var i = RunTime.buttonInfo.firstElement().elementsNamed("button");
  3003.     while(i.hasNext() == true) {
  3004.         var node = i.next();
  3005.         var pageNumVal = node.get("page");
  3006.         var xVal = node.get("x");
  3007.         var yVal = node.get("y");
  3008.         var widthVal = node.get("width");
  3009.         var heightVal = node.get("height");
  3010.         var imageVal = node.get("image");
  3011.         var typeVal = node.get("type");
  3012.         var popupWidthVal = node.get("popupWidth");
  3013.         var popupHeightVal = node.get("popupHeight");
  3014.         var youtubeIdVal = node.get("youtubeId");
  3015.         var destinationVal = node.get("destination");
  3016.         var layer = node.get("layer");
  3017.         var textVal = "";
  3018.         var fontColorVal = "";
  3019.         var fontSizeVal = "";
  3020.         var window_color = node.get("windowColor");
  3021.         var target = node.get("target");
  3022.         if(node.get("text") != null) textVal = node.get("text");
  3023.         if(node.get("fontColor") != null) fontColorVal = node.get("fontColor");
  3024.         if(node.get("fontSize") != null) fontSizeVal = node.get("fontSize");
  3025.         var htmlText = RunTime.extractCData(node.toString());
  3026.         if(htmlText != null) {
  3027.             if(htmlText.indexOf("iframe") != -1) {
  3028.                 var dom = new DOMParser();
  3029.                 var newHtmlDom = dom.parseFromString(htmlText,"text/xml");
  3030.                 var iframe = newHtmlDom.getElementsByTagName("iframe")[0];
  3031.                 if(iframe != null) htmlText = "<iframe src=\"" + iframe.getAttribute("src") + "\" frameborder=\"0\" style=\"width:100%;height:100%\" scrolling=\"yes\" ></iframe>";
  3032.             }
  3033.         }
  3034.         try {
  3035.             var iframe = node.elementsNamed("iframe").next();
  3036.             if(iframe != null) htmlText = "<iframe src=\"" + iframe.get("src") + "\" frameborder=\"0\" style=\"width:100%;height:100%\" scrolling='yes'></iframe>";
  3037.         } catch( ex ) {
  3038.         }
  3039.         var item = new core.ButtonInfo();
  3040.         item.pageNum = Std.parseInt(pageNumVal) - 1;
  3041.         item.x = Std.parseFloat(xVal);
  3042.         item.y = Std.parseFloat(yVal);
  3043.         item.width = Std.parseFloat(widthVal);
  3044.         item.height = Std.parseFloat(heightVal);
  3045.         item.layer = layer == null?"onpage":layer;
  3046.         item.htmlText = htmlText;
  3047.         if(popupWidthVal != null) item.popupWidth = Std.parseInt(popupWidthVal);
  3048.         if(popupHeightVal != null) item.popupHeight = Std.parseInt(popupHeightVal);
  3049.         item.youtubeId = youtubeIdVal;
  3050.         item.destination = destinationVal;
  3051.         item.type = typeVal == null?"":typeVal;
  3052.         item.image = imageVal;
  3053.         item.text = textVal;
  3054.         if(target != null) item.target = target == ""?"_blank":target;
  3055.         if(window_color != null) item.window_color = window_color;
  3056.         if(fontColorVal != "") item.fontColor = fontColorVal;
  3057.         if(fontSizeVal != "") item.fontSize = fontSizeVal;
  3058.         RunTime.book.buttons.push(item);
  3059.     }
  3060. }
  3061. RunTime.getInputAndJumpToPage = function() {
  3062.     RunTime.flipBook.stopFlip();
  3063.     var t = RunTime.flipBook.tbPage;
  3064.     var val = t.value;
  3065.     val = StringTools.trim(val);
  3066.     var num = RunTime.flipBook.currentPageNum;
  3067.     if(val != "") num = Std.parseInt(val) - 1;
  3068.     if(num < 0) num = 0; else if(num > RunTime.book.pages.length - 1) num = RunTime.book.pages.length - 1;
  3069.     RunTime.flipBook.tbPage.setAttribute("value",Std.string(num + 1));
  3070.     RunTime.flipBook.turnToPage(num);
  3071.     RunTime.flipBook.tbPage.blur();
  3072. }
  3073. RunTime.getPage = function(currentPageNum,pageOffset,useNewDrawParams) {
  3074.     if(useNewDrawParams == null) useNewDrawParams = true;
  3075.     if(pageOffset == null) pageOffset = 0;
  3076.     if(RunTime.book == null || RunTime.book.pages == null) return null;
  3077.     var num = currentPageNum + pageOffset;
  3078.     if(num < 0 || num > RunTime.book.pages.length - 1) return null;
  3079.     var page = RunTime.book.pages[num];
  3080.     page.pageOffset = pageOffset;
  3081.     if(useNewDrawParams == true) page.drawParams = RunTime.getDrawParams();
  3082.     if(RunTime.singlePage) {
  3083.         RunTime.flipBook.zoomLeftPage.width = page.drawParams.dw | 0;
  3084.         RunTime.flipBook.zoomLeftPage.height = page.drawParams.dh | 0;
  3085.         RunTime.flipBook.zoomLeftPage.style.left = Std.string(page.drawParams.dx) + "px";
  3086.         RunTime.flipBook.zoomLeftPage.style.top = Std.string(page.drawParams.dy) + "px";
  3087.         RunTime.flipBook.leftPageLock.style.width = (page.drawParams.dw | 0) + "px";
  3088.         RunTime.flipBook.leftPageLock.style.height = (page.drawParams.dh | 0) + "px";
  3089.         RunTime.flipBook.leftPageLock.style.left = Std.string(page.drawParams.dx) + "px";
  3090.         RunTime.flipBook.leftPageLock.style.top = Std.string(page.drawParams.dy) + "px";
  3091.     }
  3092.     return page;
  3093. }
  3094. RunTime.getDrawParams = function(layout) {
  3095.     if(layout == null) layout = 0;
  3096.     var dp = new core.DrawParams();
  3097.     var im = new orc.utils.ImageMetricHelper(RunTime.book.pageWidth,RunTime.book.pageHeight);
  3098.     var cw = RunTime.clientWidth;
  3099.     if(layout != 0) cw = 0.5 * cw;
  3100.     var ch = RunTime.clientHeight;
  3101.     var scale = im.getMaxFitScale(cw,ch);
  3102.     var dw = scale * RunTime.book.pageWidth;
  3103.     var dh = scale * RunTime.book.pageHeight;
  3104.     var dx = 0.5 * (cw - dw);
  3105.     if(layout != 0) {
  3106.         if(RunTime.book.rightToLeft) dx = layout > 0?cw - dw:cw; else dx = layout < 0?cw - dw:cw;
  3107.     }
  3108.     var dy = 0.5 * (ch - dh);
  3109.     var sx = 0;
  3110.     var sy = 0;
  3111.     var sw = RunTime.book.pageWidth;
  3112.     var sh = RunTime.book.pageHeight;
  3113.     dp.sx = sx;
  3114.     dp.sy = sy;
  3115.     dp.sw = sw;
  3116.     dp.sh = sh;
  3117.     dp.dx = dx;
  3118.     dp.dy = dy;
  3119.     dp.dw = dw;
  3120.     dp.dh = dh;
  3121.     return dp;
  3122. }
  3123. RunTime.getGolobaDrawParams = function() {
  3124.     var dp = new core.DrawParams();
  3125.     var im = new orc.utils.ImageMetricHelper(RunTime.book.pageWidth * 2,RunTime.book.pageHeight);
  3126.     var cw = RunTime.clientWidth;
  3127.     var ch = RunTime.clientHeight;
  3128.     var scale = im.getMaxFitScale(cw,ch);
  3129.     var dw = scale * RunTime.book.pageWidth * 2;
  3130.     var dh = scale * RunTime.book.pageHeight;
  3131.     var dx = 0.5 * (cw - dw) * 2;
  3132.     var dy = 0.5 * (ch - dh) * 2;
  3133.     var sx = 0;
  3134.     var sy = 0;
  3135.     var sw = RunTime.book.pageWidth * 2;
  3136.     var sh = RunTime.book.pageHeight;
  3137.     dp.sx = sx;
  3138.     dp.sy = sy;
  3139.     dp.sw = sw;
  3140.     dp.sh = sh;
  3141.     dp.dx = dx;
  3142.     dp.dy = dy;
  3143.     dp.dw = dw;
  3144.     dp.dh = dh;
  3145.     return dp;
  3146. }
  3147. RunTime.saveLocal = function(key,val) {
  3148. }
  3149. RunTime.getLocal = function(key) {
  3150.     return "";
  3151. }
  3152. RunTime.setUpdateFlag = function(bookId) {
  3153.     var prefix = bookId == null?RunTime.book.bookId:bookId;
  3154.     RunTime.saveLocal(prefix + "-" + "uploadFlag","1");
  3155. }
  3156. RunTime.getAndResetUpdateFlag = function() {
  3157.     var val = RunTime.getLocal(RunTime.book.bookId + "-" + "uploadFlag");
  3158.     RunTime.saveLocal(RunTime.book.bookId + "-" + "uploadFlag","");
  3159.     return val == "1";
  3160. }
  3161. RunTime.saveCurrentPageNum = function() {
  3162.     RunTime.savePageNum(Std.string(RunTime.flipBook.getCurrentPageNum()));
  3163. }
  3164. RunTime.savePageNum = function(val,bookId) {
  3165.     var prefix = bookId == null?RunTime.book.bookId:bookId;
  3166.     RunTime.saveLocal(prefix + "-" + "page",val);
  3167. }
  3168. RunTime.getAndResetSavedPageNum = function() {
  3169.     var val = RunTime.getLocal(RunTime.book.bookId + "-" + "page");
  3170.     RunTime.savePageNum("");
  3171.     if(val == null || val == "") return 0; else return Std.parseInt(val);
  3172. }
  3173. RunTime.saveBottomBarVisible = function(val) {
  3174.     if(val == true) RunTime.saveLocal(RunTime.book.bookId + "-" + "bottomBarVisible","true"); else RunTime.saveLocal(RunTime.book.bookId + "-" + "bottomBarVisible","false");
  3175. }
  3176. RunTime.getBottomBarVisible = function() {
  3177.     return RunTime.getLocal(RunTime.book.bookId + "-" + "bottomBarVisible") == "true";
  3178. }
  3179. RunTime.encrypt = function(src) {
  3180.     return RunTime.encryptKey(src,RunTime.key);
  3181. }
  3182. RunTime.encryptKey = function(src,key) {
  3183.     var n = 0;
  3184.     var rtn = "";
  3185.     var _g1 = 0, _g = src.length - 1;
  3186.     while(_g1 < _g) {
  3187.         var i = _g1++;
  3188.         var c = HxOverrides.cca(src,i) + HxOverrides.cca(key,n);
  3189.         var s = String.fromCharCode(c);
  3190.         rtn += s;
  3191.         n++;
  3192.         if(n >= key.length - 1) n = 0;
  3193.     }
  3194.     if(src.length > 0) rtn = rtn + HxOverrides.substr(src,src.length - 1,null);
  3195.     return RunTime.encode64(rtn);
  3196. }
  3197. RunTime.encode64 = function(txt,padding) {
  3198.     if(padding == null) padding = true;
  3199.     var bytes = haxe.io.Bytes.alloc(txt.length);
  3200.     var _g1 = 0, _g = txt.length;
  3201.     while(_g1 < _g) {
  3202.         var i = _g1++;
  3203.         var c = txt.charCodeAt(i);
  3204.         bytes.b[i] = c & 255;
  3205.     }
  3206.     var c = new haxe.BaseCode(haxe.io.Bytes.ofString("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"));
  3207.     var base64 = c.encodeBytes(bytes).toString();
  3208.     if(padding == true) {
  3209.         var remainder = base64.length % 4;
  3210.         if(remainder > 1) base64 += "=";
  3211.         if(remainder == 2) base64 += "=";
  3212.     }
  3213.     return base64;
  3214. }
  3215. RunTime.decode64 = function(txt) {
  3216.     var paddingSize = -1;
  3217.     if(txt.charAt(txt.length - 2) == "=") paddingSize = 2; else if(txt.charAt(txt.length - 1) == "=") paddingSize = 1;
  3218.     if(paddingSize != -1) txt = HxOverrides.substr(txt,0,txt.length - paddingSize);
  3219.     var c = new haxe.BaseCode(haxe.io.Bytes.ofString("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"));
  3220.     return c.decodeString(txt);
  3221. }
  3222. RunTime.calcKey = function(w,h) {
  3223.     var val = Std.string(w * h);
  3224.     val = HxOverrides.substr(val,val.length - 3,null) + HxOverrides.substr(val,0,2);
  3225.     var n = "";
  3226.     var _g1 = 0, _g = val.length;
  3227.     while(_g1 < _g) {
  3228.         var i = _g1++;
  3229.         var c = HxOverrides.cca(val,i) / 2 | 0;
  3230.         n = n + StringTools.hex(c);
  3231.     }
  3232.     return n.toUpperCase();
  3233. }
  3234. RunTime.clearPopupContents = function() {
  3235.     js.Lib.document.getElementById("maskPopup").style.display = "none";
  3236.     js.Lib.document.getElementById("cvsOthers").innerHTML = "";
  3237.     RunTime.flipBook.resetNoteButton();
  3238.     RunTime.flipBook.resetHighlightButton();
  3239. }
  3240. RunTime.isPopupModal = function() {
  3241.     return js.Lib.document.getElementById("maskPopup").style.display == "none"?false:true;
  3242. }
  3243. RunTime.clearAudio = function() {
  3244.     js.Lib.document.getElementById("cvsAudio").innerHTML = "";
  3245. }
  3246. RunTime.clearBgAudio = function() {
  3247.     RunTime.clearLeftBgAudio();
  3248.     RunTime.clearRightBgAudio();
  3249. }
  3250. RunTime.clearLeftBgAudio = function() {
  3251.     js.Lib.document.getElementById("cvsLeftPageBgAudio").innerHTML = "";
  3252. }
  3253. RunTime.clearRightBgAudio = function() {
  3254.     js.Lib.document.getElementById("cvsRightPageBgAudio").innerHTML = "";
  3255. }
  3256. RunTime.showPopupMaskLayer = function() {
  3257.     js.Lib.document.getElementById("maskPopup").style.display = "inline";
  3258. }
  3259. RunTime.playAudio = function() {
  3260.     var item = js.Lib.document.getElementById("cvsAudio").getElementsByTagName("audio")[0];
  3261.     item.play();
  3262. }
  3263. RunTime.playVideo = function() {
  3264.     var item = js.Lib.document.getElementById("cvsOthers").getElementsByTagName("video")[0];
  3265.     item.play();
  3266. }
  3267. RunTime.setOffset = function(dom,left,top) {
  3268.     var l = Math.round(left);
  3269.     var t = Math.round(top);
  3270.     dom.style.left = Std.string(l) + "px";
  3271.     dom.style.top = Std.string(t) + "px";
  3272. }
  3273. RunTime.useAnalyticsUA = function(ua,id) {
  3274.     if(RunTime.isNullOrEmpty(ua)) return;
  3275.     try {
  3276.         RunTime.trackerId = id;
  3277.         var gat = _gat;
  3278.         RunTime.tracker = gat._getTracker(ua);
  3279.         RunTime.tracker._initData();
  3280.     } catch( ex ) {
  3281.     }
  3282. }
  3283. RunTime.log = function(action,msg) {
  3284.     if(RunTime.tracker) RunTime.tracker._trackPageview(RunTime.trackerId + "/" + action + "/" + msg);
  3285.     var e = eval;
  3286.     var t = "if(typeof(customTrackPageView)=='function'){customTrackPageView('" + action + "','" + msg + "')}";
  3287.     e(t);
  3288. }
  3289. RunTime.logPageView = function(pageNum) {
  3290.     if(pageNum > 0) RunTime.log("page",Std.string(pageNum));
  3291. }
  3292. RunTime.logClickLink = function(url,url2) {
  3293.     if(RunTime.isNullOrEmpty(url) && RunTime.isNullOrEmpty(url2)) return;
  3294.     RunTime.log("link",RunTime.isNullOrEmpty(url) == false?url:url2);
  3295. }
  3296. RunTime.logVideoView = function(url,url2) {
  3297.     if(RunTime.isNullOrEmpty(url) && RunTime.isNullOrEmpty(url2)) return;
  3298.     url = RunTime.removePrefix(url);
  3299.     RunTime.log("video",RunTime.isNullOrEmpty(url) == false?url:url2);
  3300. }
  3301. RunTime.isNullOrEmpty = function(txt) {
  3302.     return txt == null || txt == "" || txt == "undefined";
  3303. }
  3304. RunTime.logAudioView = function(url) {
  3305.     if(url == null || url == "") return;
  3306.     url = RunTime.removePrefix(url);
  3307.     RunTime.log("audio",url);
  3308. }
  3309. RunTime.logSearch = function(keyword) {
  3310.     if(keyword == null || keyword == "") return;
  3311.     RunTime.log("search",keyword);
  3312. }
  3313. RunTime.removePrefix = function(url) {
  3314.     if(url == null || url == "") return url; else if(url.indexOf("http") == 0) return url; else {
  3315.         var i = url.lastIndexOf("/");
  3316.         return HxOverrides.substr(url,i + 1,null);
  3317.     }
  3318. }
  3319. RunTime.readLocalBookmarks = function() {
  3320.     var bookmarks = new Array();
  3321.     var i = 0;
  3322.     var _g1 = 0, _g = localStorage.length;
  3323.     while(_g1 < _g) {
  3324.         var i1 = _g1++;
  3325.         var szKey = localStorage.key(i1);
  3326.         if(szKey.indexOf(RunTime.kvPrex) == 0) {
  3327.             if(szKey.indexOf("@$bm$@") != -1) {
  3328.                 var bookmark = new core.Bookmark();
  3329.                 bookmark.fillData(szKey,localStorage.getItem(szKey));
  3330.                 bookmarks.push(bookmark);
  3331.                 RunTime.book.bookmarks.push(bookmark);
  3332.                 haxe.Log.trace("bookmark.text:" + bookmark.text + "  pagenum: " + bookmark.pageNum,{ fileName : "RunTime.hx", lineNumber : 2148, className : "RunTime", methodName : "readLocalBookmarks"});
  3333.             }
  3334.         }
  3335.     }
  3336.     return bookmarks;
  3337. }
  3338. RunTime.readLocalHighLights = function() {
  3339.     var highlights = new Array();
  3340.     var i = 0;
  3341.     var _g1 = 0, _g = localStorage.length;
  3342.     while(_g1 < _g) {
  3343.         var i1 = _g1++;
  3344.         var szKey = localStorage.key(i1);
  3345.         if(szKey.indexOf(RunTime.kvPrex) == 0) {
  3346.             if(szKey.indexOf("@$ht$@") != -1) {
  3347.                 var highlight = new core.HighLight();
  3348.                 highlight.fillData(szKey,localStorage.getItem(szKey));
  3349.                 highlights.push(highlight);
  3350.                 RunTime.book.highlights.push(highlight);
  3351.             }
  3352.         }
  3353.     }
  3354.     RunTime.highLights = highlights;
  3355.     if(RunTime.flipBook != null) {
  3356.         RunTime.flipBook.loadCtxHighLights();
  3357.         RunTime.flipBook.bookContext.render();
  3358.     }
  3359.     return highlights;
  3360. }
  3361. RunTime.updateHighLightNote = function(text,color) {
  3362.     if(RunTime.currentHighLight != null) {
  3363.         RunTime.currentHighLight.updateText(text,color);
  3364.         RunTime.flipBook.resetHighlightButton();
  3365.         RunTime.flipBook.bookContext.render();
  3366.     }
  3367. }
  3368. RunTime.deleteHighLight = function() {
  3369.     if(RunTime.currentHighLight != null) {
  3370.         RunTime.currentHighLight.remove();
  3371.         HxOverrides.remove(RunTime.book.highlights,RunTime.currentHighLight);
  3372.         RunTime.currentHighLight = null;
  3373.         RunTime.flipBook.loadCtxHighLights();
  3374.         RunTime.flipBook.bookContext.render();
  3375.         RunTime.flipBook.resetHighlightButton();
  3376.     }
  3377. }
  3378. RunTime.readLocalNotes = function() {
  3379.     var notes = new Array();
  3380.     var i = 0;
  3381.     var _g1 = 0, _g = localStorage.length;
  3382.     while(_g1 < _g) {
  3383.         var i1 = _g1++;
  3384.         var szKey = localStorage.key(i1);
  3385.         if(szKey.indexOf(RunTime.kvPrex) == 0) {
  3386.             if(szKey.indexOf("@$ni$@") != -1) {
  3387.                 var note = new core.NoteIcon();
  3388.                 note.fillData(szKey,localStorage.getItem(szKey));
  3389.                 notes.push(note);
  3390.                 RunTime.book.notes.push(note);
  3391.             }
  3392.         }
  3393.     }
  3394.     RunTime.notes = notes;
  3395.     if(RunTime.flipBook != null) {
  3396.         RunTime.flipBook.loadCtxNotes();
  3397.         RunTime.flipBook.bookContext.render();
  3398.     }
  3399.     return notes;
  3400. }
  3401. RunTime.updateNote = function(text) {
  3402.     if(RunTime.currentNote != null) {
  3403.         RunTime.currentNote.updateText(text);
  3404.         RunTime.flipBook.resetNoteButton();
  3405.     }
  3406. }
  3407. RunTime.deleteNote = function() {
  3408.     if(RunTime.currentNote != null) {
  3409.         RunTime.currentNote.remove();
  3410.         HxOverrides.remove(RunTime.book.notes,RunTime.currentNote);
  3411.         RunTime.currentNote = null;
  3412.         RunTime.flipBook.loadCtxNotes();
  3413.         RunTime.flipBook.bookContext.render();
  3414.         RunTime.flipBook.resetNoteButton();
  3415.     }
  3416. }
  3417. RunTime.showDebugMsg = function(msg) {
  3418.     var div = js.Lib.document.createElement("div");
  3419.     div.style.position = "absolute";
  3420.     div.style.zIndex = 9999;
  3421.     div.style.background = "white";
  3422.     div.style.border = "1px solid #000";
  3423.     div.style.display = "block";
  3424.     var debugTimer = new haxe.Timer(300);
  3425.     debugTimer.run = function() {
  3426.         div.style.top = "100px";
  3427.         div.style.left = "100px";
  3428.         div.innerHTML = "" + Std.string(msg);
  3429.         js.Lib.document.body.appendChild(div);
  3430.     };
  3431. }
  3432. RunTime.resizeSlide = function(p1,p2,p3,p4,p5) {
  3433.     var scale = p3 / p1.height;
  3434.     var leftVal = (p2 - p1.width * scale) / 2;
  3435.     js.Lib.document.getElementById(p4).style.width = (p1.width * scale | 0) + "px";
  3436.     js.Lib.document.getElementById(p4).style.marginLeft = leftVal + "px";
  3437. }
  3438. var Std = function() { }
  3439. Std.__name__ = true;
  3440. Std["is"] = function(v,t) {
  3441.     return js.Boot.__instanceof(v,t);
  3442. }
  3443. Std.string = function(s) {
  3444.     return js.Boot.__string_rec(s,"");
  3445. }
  3446. Std["int"] = function(x) {
  3447.     return x | 0;
  3448. }
  3449. Std.parseInt = function(x) {
  3450.     var v = parseInt(x,10);
  3451.     if(v == 0 && (HxOverrides.cca(x,1) == 120 || HxOverrides.cca(x,1) == 88)) v = parseInt(x);
  3452.     if(isNaN(v)) return null;
  3453.     return v;
  3454. }
  3455. Std.parseFloat = function(x) {
  3456.     return parseFloat(x);
  3457. }
  3458. Std.random = function(x) {
  3459.     return Math.floor(Math.random() * x);
  3460. }
  3461. var StringBuf = function() {
  3462.     this.b = "";
  3463. };
  3464. StringBuf.__name__ = true;
  3465. StringBuf.prototype = {
  3466.     toString: function() {
  3467.         return this.b;
  3468.     }
  3469.     ,addSub: function(s,pos,len) {
  3470.         this.b += HxOverrides.substr(s,pos,len);
  3471.     }
  3472.     ,addChar: function(c) {
  3473.         this.b += String.fromCharCode(c);
  3474.     }
  3475.     ,add: function(x) {
  3476.         this.b += Std.string(x);
  3477.     }
  3478.     ,__class__: StringBuf
  3479. }
  3480. var StringTools = function() { }
  3481. StringTools.__name__ = true;
  3482. StringTools.urlEncode = function(s) {
  3483.     return encodeURIComponent(s);
  3484. }
  3485. StringTools.urlDecode = function(s) {
  3486.     return decodeURIComponent(s.split("+").join(" "));
  3487. }
  3488. StringTools.htmlEscape = function(s) {
  3489.     return s.split("&").join("&").split("<").join("<").split(">").join(">");
  3490. }
  3491. StringTools.htmlUnescape = function(s) {
  3492.     return s.split(">").join(">").split("<").join("<").split("&").join("&");
  3493. }
  3494. StringTools.startsWith = function(s,start) {
  3495.     return s.length >= start.length && HxOverrides.substr(s,0,start.length) == start;
  3496. }
  3497. StringTools.endsWith = function(s,end) {
  3498.     var elen = end.length;
  3499.     var slen = s.length;
  3500.     return slen >= elen && HxOverrides.substr(s,slen - elen,elen) == end;
  3501. }
  3502. StringTools.isSpace = function(s,pos) {
  3503.     var c = HxOverrides.cca(s,pos);
  3504.     return c >= 9 && c <= 13 || c == 32;
  3505. }
  3506. StringTools.ltrim = function(s) {
  3507.     var l = s.length;
  3508.     var r = 0;
  3509.     while(r < l && StringTools.isSpace(s,r)) r++;
  3510.     if(r > 0) return HxOverrides.substr(s,r,l - r); else return s;
  3511. }
  3512. StringTools.rtrim = function(s) {
  3513.     var l = s.length;
  3514.     var r = 0;
  3515.     while(r < l && StringTools.isSpace(s,l - r - 1)) r++;
  3516.     if(r > 0) return HxOverrides.substr(s,0,l - r); else return s;
  3517. }
  3518. StringTools.trim = function(s) {
  3519.     return StringTools.ltrim(StringTools.rtrim(s));
  3520. }
  3521. StringTools.rpad = function(s,c,l) {
  3522.     var sl = s.length;
  3523.     var cl = c.length;
  3524.     while(sl < l) if(l - sl < cl) {
  3525.         s += HxOverrides.substr(c,0,l - sl);
  3526.         sl = l;
  3527.     } else {
  3528.         s += c;
  3529.         sl += cl;
  3530.     }
  3531.     return s;
  3532. }
  3533. StringTools.lpad = function(s,c,l) {
  3534.     var ns = "";
  3535.     var sl = s.length;
  3536.     if(sl >= l) return s;
  3537.     var cl = c.length;
  3538.     while(sl < l) if(l - sl < cl) {
  3539.         ns += HxOverrides.substr(c,0,l - sl);
  3540.         sl = l;
  3541.     } else {
  3542.         ns += c;
  3543.         sl += cl;
  3544.     }
  3545.     return ns + s;
  3546. }
  3547. StringTools.replace = function(s,sub,by) {
  3548.     return s.split(sub).join(by);
  3549. }
  3550. StringTools.hex = function(n,digits) {
  3551.     var s = "";
  3552.     var hexChars = "0123456789ABCDEF";
  3553.     do {
  3554.         s = hexChars.charAt(n & 15) + s;
  3555.         n >>>= 4;
  3556.     } while(n > 0);
  3557.     if(digits != null) while(s.length < digits) s = "0" + s;
  3558.     return s;
  3559. }
  3560. StringTools.fastCodeAt = function(s,index) {
  3561.     return s.charCodeAt(index);
  3562. }
  3563. StringTools.isEOF = function(c) {
  3564.     return c != c;
  3565. }
  3566. var XMLHttpRequestResponseType = { __ename__ : true, __constructs__ : ["arraybuffer","blob","document","json","text"] }
  3567. XMLHttpRequestResponseType.arraybuffer = ["arraybuffer",0];
  3568. XMLHttpRequestResponseType.arraybuffer.toString = $estr;
  3569. XMLHttpRequestResponseType.arraybuffer.__enum__ = XMLHttpRequestResponseType;
  3570. XMLHttpRequestResponseType.blob = ["blob",1];
  3571. XMLHttpRequestResponseType.blob.toString = $estr;
  3572. XMLHttpRequestResponseType.blob.__enum__ = XMLHttpRequestResponseType;
  3573. XMLHttpRequestResponseType.document = ["document",2];
  3574. XMLHttpRequestResponseType.document.toString = $estr;
  3575. XMLHttpRequestResponseType.document.__enum__ = XMLHttpRequestResponseType;
  3576. XMLHttpRequestResponseType.json = ["json",3];
  3577. XMLHttpRequestResponseType.json.toString = $estr;
  3578. XMLHttpRequestResponseType.json.__enum__ = XMLHttpRequestResponseType;
  3579. XMLHttpRequestResponseType.text = ["text",4];
  3580. XMLHttpRequestResponseType.text.toString = $estr;
  3581. XMLHttpRequestResponseType.text.__enum__ = XMLHttpRequestResponseType;
  3582. var Xml = function() {
  3583. };
  3584. Xml.__name__ = true;
  3585. Xml.parse = function(str) {
  3586.     return haxe.xml.Parser.parse(str);
  3587. }
  3588. Xml.createElement = function(name) {
  3589.     var r = new Xml();
  3590.     r.nodeType = Xml.Element;
  3591.     r._children = new Array();
  3592.     r._attributes = new Hash();
  3593.     r.setNodeName(name);
  3594.     return r;
  3595. }
  3596. Xml.createPCData = function(data) {
  3597.     var r = new Xml();
  3598.     r.nodeType = Xml.PCData;
  3599.     r.setNodeValue(data);
  3600.     return r;
  3601. }
  3602. Xml.createCData = function(data) {
  3603.     var r = new Xml();
  3604.     r.nodeType = Xml.CData;
  3605.     r.setNodeValue(data);
  3606.     return r;
  3607. }
  3608. Xml.createComment = function(data) {
  3609.     var r = new Xml();
  3610.     r.nodeType = Xml.Comment;
  3611.     r.setNodeValue(data);
  3612.     return r;
  3613. }
  3614. Xml.createDocType = function(data) {
  3615.     var r = new Xml();
  3616.     r.nodeType = Xml.DocType;
  3617.     r.setNodeValue(data);
  3618.     return r;
  3619. }
  3620. Xml.createProlog = function(data) {
  3621.     var r = new Xml();
  3622.     r.nodeType = Xml.Prolog;
  3623.     r.setNodeValue(data);
  3624.     return r;
  3625. }
  3626. Xml.createDocument = function() {
  3627.     var r = new Xml();
  3628.     r.nodeType = Xml.Document;
  3629.     r._children = new Array();
  3630.     return r;
  3631. }
  3632. Xml.prototype = {
  3633.     toString: function() {
  3634.         if(this.nodeType == Xml.PCData) return this._nodeValue;
  3635.         if(this.nodeType == Xml.CData) return "<![CDATA[" + this._nodeValue + "]]>";
  3636.         if(this.nodeType == Xml.Comment) return "<!--" + this._nodeValue + "-->";
  3637.         if(this.nodeType == Xml.DocType) return "<!DOCTYPE " + this._nodeValue + ">";
  3638.         if(this.nodeType == Xml.Prolog) return "<?" + this._nodeValue + "?>";
  3639.         var s = new StringBuf();
  3640.         if(this.nodeType == Xml.Element) {
  3641.             s.b += Std.string("<");
  3642.             s.b += Std.string(this._nodeName);
  3643.             var $it0 = this._attributes.keys();
  3644.             while( $it0.hasNext() ) {
  3645.                 var k = $it0.next();
  3646.                 s.b += Std.string(" ");
  3647.                 s.b += Std.string(k);
  3648.                 s.b += Std.string("=\"");
  3649.                 s.b += Std.string(this._attributes.get(k));
  3650.                 s.b += Std.string("\"");
  3651.             }
  3652.             if(this._children.length == 0) {
  3653.                 s.b += Std.string("/>");
  3654.                 return s.b;
  3655.             }
  3656.             s.b += Std.string(">");
  3657.         }
  3658.         var $it1 = this.iterator();
  3659.         while( $it1.hasNext() ) {
  3660.             var x = $it1.next();
  3661.             s.b += Std.string(x.toString());
  3662.         }
  3663.         if(this.nodeType == Xml.Element) {
  3664.             s.b += Std.string("</");
  3665.             s.b += Std.string(this._nodeName);
  3666.             s.b += Std.string(">");
  3667.         }
  3668.         return s.b;
  3669.     }
  3670.     ,insertChild: function(x,pos) {
  3671.         if(this._children == null) throw "bad nodetype";
  3672.         if(x._parent != null) HxOverrides.remove(x._parent._children,x);
  3673.         x._parent = this;
  3674.         this._children.splice(pos,0,x);
  3675.     }
  3676.     ,removeChild: function(x) {
  3677.         if(this._children == null) throw "bad nodetype";
  3678.         var b = HxOverrides.remove(this._children,x);
  3679.         if(b) x._parent = null;
  3680.         return b;
  3681.     }
  3682.     ,addChild: function(x) {
  3683.         if(this._children == null) throw "bad nodetype";
  3684.         if(x._parent != null) HxOverrides.remove(x._parent._children,x);
  3685.         x._parent = this;
  3686.         this._children.push(x);
  3687.     }
  3688.     ,firstElement: function() {
  3689.         if(this._children == null) throw "bad nodetype";
  3690.         var cur = 0;
  3691.         var l = this._children.length;
  3692.         while(cur < l) {
  3693.             var n = this._children[cur];
  3694.             if(n.nodeType == Xml.Element) return n;
  3695.             cur++;
  3696.         }
  3697.         return null;
  3698.     }
  3699.     ,firstChild: function() {
  3700.         if(this._children == null) throw "bad nodetype";
  3701.         return this._children[0];
  3702.     }
  3703.     ,elementsNamed: function(name) {
  3704.         if(this._children == null) throw "bad nodetype";
  3705.         return { cur : 0, x : this._children, hasNext : function() {
  3706.             var k = this.cur;
  3707.             var l = this.x.length;
  3708.             while(k < l) {
  3709.                 var n = this.x[k];
  3710.                 if(n.nodeType == Xml.Element && n._nodeName == name) break;
  3711.                 k++;
  3712.             }
  3713.             this.cur = k;
  3714.             return k < l;
  3715.         }, next : function() {
  3716.             var k = this.cur;
  3717.             var l = this.x.length;
  3718.             while(k < l) {
  3719.                 var n = this.x[k];
  3720.                 k++;
  3721.                 if(n.nodeType == Xml.Element && n._nodeName == name) {
  3722.                     this.cur = k;
  3723.                     return n;
  3724.                 }
  3725.             }
  3726.             return null;
  3727.         }};
  3728.     }
  3729.     ,elements: function() {
  3730.         if(this._children == null) throw "bad nodetype";
  3731.         return { cur : 0, x : this._children, hasNext : function() {
  3732.             var k = this.cur;
  3733.             var l = this.x.length;
  3734.             while(k < l) {
  3735.                 if(this.x[k].nodeType == Xml.Element) break;
  3736.                 k += 1;
  3737.             }
  3738.             this.cur = k;
  3739.             return k < l;
  3740.         }, next : function() {
  3741.             var k = this.cur;
  3742.             var l = this.x.length;
  3743.             while(k < l) {
  3744.                 var n = this.x[k];
  3745.                 k += 1;
  3746.                 if(n.nodeType == Xml.Element) {
  3747.                     this.cur = k;
  3748.                     return n;
  3749.                 }
  3750.             }
  3751.             return null;
  3752.         }};
  3753.     }
  3754.     ,iterator: function() {
  3755.         if(this._children == null) throw "bad nodetype";
  3756.         return { cur : 0, x : this._children, hasNext : function() {
  3757.             return this.cur < this.x.length;
  3758.         }, next : function() {
  3759.             return this.x[this.cur++];
  3760.         }};
  3761.     }
  3762.     ,attributes: function() {
  3763.         if(this.nodeType != Xml.Element) throw "bad nodeType";
  3764.         return this._attributes.keys();
  3765.     }
  3766.     ,exists: function(att) {
  3767.         if(this.nodeType != Xml.Element) throw "bad nodeType";
  3768.         return this._attributes.exists(att);
  3769.     }
  3770.     ,remove: function(att) {
  3771.         if(this.nodeType != Xml.Element) throw "bad nodeType";
  3772.         this._attributes.remove(att);
  3773.     }
  3774.     ,set: function(att,value) {
  3775.         if(this.nodeType != Xml.Element) throw "bad nodeType";
  3776.         this._attributes.set(att,value);
  3777.     }
  3778.     ,get: function(att) {
  3779.         if(this.nodeType != Xml.Element) throw "bad nodeType";
  3780.         return this._attributes.get(att);
  3781.     }
  3782.     ,getParent: function() {
  3783.         return this._parent;
  3784.     }
  3785.     ,setNodeValue: function(v) {
  3786.         if(this.nodeType == Xml.Element || this.nodeType == Xml.Document) throw "bad nodeType";
  3787.         return this._nodeValue = v;
  3788.     }
  3789.     ,getNodeValue: function() {
  3790.         if(this.nodeType == Xml.Element || this.nodeType == Xml.Document) throw "bad nodeType";
  3791.         return this._nodeValue;
  3792.     }
  3793.     ,setNodeName: function(n) {
  3794.         if(this.nodeType != Xml.Element) throw "bad nodeType";
  3795.         return this._nodeName = n;
  3796.     }
  3797.     ,getNodeName: function() {
  3798.         if(this.nodeType != Xml.Element) throw "bad nodeType";
  3799.         return this._nodeName;
  3800.     }
  3801.     ,__class__: Xml
  3802. }
  3803. var Xml2Html = function() {
  3804. };
  3805. Xml2Html.__name__ = true;
  3806. Xml2Html.prototype = {
  3807.     prepareXmlAsHtml: function(txt) {
  3808.         this.map = new Array();
  3809.         txt = StringTools.replace(txt,"<![CDATA[","]]>");
  3810.         var lines = txt.split("]]>");
  3811.         if(lines.length == 0) return txt;
  3812.         var buff = new StringBuf();
  3813.         var k = 0;
  3814.         var _g1 = 0, _g = lines.length;
  3815.         while(_g1 < _g) {
  3816.             var i = _g1++;
  3817.             var val = lines[i];
  3818.             if(i % 2 == 0) buff.b += Std.string(val); else {
  3819.                 var key = Std.string(k);
  3820.                 buff.b += Std.string("<cdata>" + key + "</cdata>");
  3821.                 var cdata = new CData();
  3822.                 cdata.key = key;
  3823.                 cdata.val = val;
  3824.                 this.map.push(cdata);
  3825.                 k++;
  3826.             }
  3827.         }
  3828.         return buff.b;
  3829.     }
  3830.     ,getCData: function(key) {
  3831.         if(this.map == null) return null;
  3832.         var _g1 = 0, _g = this.map.length;
  3833.         while(_g1 < _g) {
  3834.             var i = _g1++;
  3835.             var item = this.map[i];
  3836.             if(item.key == key) return item.val;
  3837.         }
  3838.         return null;
  3839.     }
  3840.     ,__class__: Xml2Html
  3841. }
  3842. var Zoom = function() { }
  3843. Zoom.__name__ = true;
  3844. Zoom.getContext = function() {
  3845.     return Zoom.cvsZoom.getContext("2d");
  3846. }
  3847. Zoom.Load = function() {
  3848.     Zoom.cvsZoomDom = js.Lib.document.getElementById("cvsZoom");
  3849.     Zoom.mask = js.Lib.document.getElementById("mask");
  3850.     Zoom.maskPopup = js.Lib.document.getElementById("maskPopup");
  3851.     Zoom.maskPopup.onclick = Zoom.forbidden;
  3852.     Zoom.maskPopup.ondblclick = Zoom.onDblClick;
  3853.     Zoom.maskPopup.ontouchstart = Zoom.forbidden;
  3854.     Zoom.maskPopup.ontouchmove = Zoom.forbidden;
  3855.     Zoom.maskPopup.ontouchend = Zoom.forbidden;
  3856.     Zoom.maskPopup.ontouchcancel = Zoom.forbidden;
  3857.     Zoom.maskPopup.gestureend = Zoom.forbidden;
  3858.     Zoom.maskPopup.gesturestart = Zoom.forbidden;
  3859.     Zoom.maskPopup.gesturechange = Zoom.forbidden;
  3860.     Zoom.maskPopup.onscroll = Zoom.forbidden;
  3861.     Zoom.maskPopup.onmousewheel = Zoom.forbidden;
  3862.     Zoom.mask.ondblclick = Zoom.onDblClick;
  3863.     var dy = Zoom.cvsZoomDom;
  3864.     Zoom.cvsZoom = dy;
  3865.     Zoom.mask.ontouchstart = Zoom.onZoom;
  3866.     Zoom.clientWidth = js.Lib.window.document.body.clientWidth;
  3867.     Zoom.clientHeight = js.Lib.window.document.body.clientHeight;
  3868.     RunTime.clientWidth = Zoom.clientWidth;
  3869.     RunTime.clientHeight = Zoom.clientHeight;
  3870.     var params = orc.utils.Util.getUrlParams();
  3871.     var _g1 = 0, _g = params.length;
  3872.     while(_g1 < _g) {
  3873.         var i = _g1++;
  3874.         var item = params[i];
  3875.         if(item.key == "img") Zoom.imgSrc = item.value; else if(item.key == "bookId") Zoom.bookId = item.value; else if(item.key == "page") Zoom.pageNum = item.value; else if(item.key == "pw") Zoom.pageWidth = Std.parseFloat(item.value); else if(item.key == "ph") Zoom.pageHeight = Std.parseFloat(item.value); else if(item.key == "bookTitle") {
  3876.             Zoom.bookTitle = item.value;
  3877.             Zoom.bookTitle = StringTools.urlDecode(Zoom.bookTitle);
  3878.         } else if(item.key == "bbv") Zoom.bbv = item.value; else if(item.key == "ua") Zoom.analyticsUA = item.value; else if(item.key == "pcode") Zoom.pcode = item.value;
  3879.     }
  3880.     js.Lib.document.title = Zoom.bookTitle + " - Page " + Std.string(Std.parseInt(Zoom.pageNum) + 1);
  3881.     Zoom.img = new core.Html5Image(Zoom.imgSrc,Zoom.onLoadImage);
  3882.     RunTime.useAnalyticsUA(Zoom.analyticsUA,Zoom.bookId);
  3883.     RunTime.logPageView(Std.parseInt(Zoom.pageNum) + 1);
  3884. }
  3885. Zoom.forbidden = function(e) {
  3886.     e.stopPropagation();
  3887. }
  3888. Zoom.onLoadImage = function() {
  3889.     var w = Zoom.img.image.width;
  3890.     var h = Zoom.img.image.height;
  3891.     Zoom.cvsZoom.width = Math.max(Zoom.pageWidth,Math.max(w,Zoom.clientWidth)) | 0;
  3892.     Zoom.cvsZoom.height = Math.max(Zoom.pageHeight,Math.max(h,Zoom.clientHeight)) | 0;
  3893.     Zoom.mask.style.width = Std.string(Zoom.cvsZoom.width) + "px";
  3894.     Zoom.mask.style.height = Std.string(Zoom.cvsZoom.height) + "px";
  3895.     Zoom.xOffset = 0.5 * (Zoom.cvsZoom.width - Math.max(Zoom.img.image.width,Zoom.pageWidth));
  3896.     Zoom.yOffset = 0.5 * (Zoom.cvsZoom.height - Math.max(Zoom.img.image.height,Zoom.pageHeight));
  3897.     Zoom.xScale = w / Zoom.pageWidth;
  3898.     Zoom.yScale = h / Zoom.pageHeight;
  3899.     Zoom.draw();
  3900.     RunTime.requestHotlinks(Zoom.loadHotlinks);
  3901.     RunTime.requestButtons(Zoom.loadButtons);
  3902.     RunTime.requestVideos(Zoom.loadVideos);
  3903. }
  3904. Zoom.draw = function() {
  3905.     var ctx = Zoom.getContext();
  3906.     var dp = Zoom.getDrawParams();
  3907.     ctx.drawImage(Zoom.img.image,dp.sx,dp.sy,dp.sw,dp.sh,dp.dx,dp.dy,dp.dw,dp.dh);
  3908. }
  3909. Zoom.getDrawParams = function() {
  3910.     var dp = new core.DrawParams();
  3911.     dp.sx = 0;
  3912.     dp.sy = 0;
  3913.     dp.sw = Zoom.img.image.width;
  3914.     dp.sh = Zoom.img.image.height;
  3915.     dp.dx = Zoom.xOffset;
  3916.     dp.dy = Zoom.yOffset;
  3917.     dp.dw = Math.max(Zoom.pageWidth,dp.sw);
  3918.     dp.dh = Math.max(Zoom.pageHeight,dp.sh);
  3919.     return dp;
  3920. }
  3921. Zoom.loadHotlinks = function() {
  3922.     var list = RunTime.book.hotlinks;
  3923.     var _g1 = 0, _g = list.length;
  3924.     while(_g1 < _g) {
  3925.         var i = _g1++;
  3926.         var item = list[i];
  3927.         if(Std.string(item.pageNum) == Zoom.pageNum) Zoom.hotlinks.push(item);
  3928.     }
  3929.     Zoom.renderHotlinks();
  3930. }
  3931. Zoom.loadVideos = function() {
  3932.     var list = RunTime.book.videos;
  3933.     var _g1 = 0, _g = list.length;
  3934.     while(_g1 < _g) {
  3935.         var i = _g1++;
  3936.         var item = list[i];
  3937.         if(Std.string(item.pageNum) == Zoom.pageNum) Zoom.videos.push(item);
  3938.     }
  3939.     Zoom.renderVideos();
  3940. }
  3941. Zoom.loadButtons = function() {
  3942.     var list = RunTime.book.buttons;
  3943.     var _g1 = 0, _g = list.length;
  3944.     while(_g1 < _g) {
  3945.         var i = _g1++;
  3946.         var item = list[i];
  3947.         if(Std.string(item.pageNum) == Zoom.pageNum) Zoom.buttons.push(item);
  3948.     }
  3949.     Zoom.renderButtons();
  3950. }
  3951. Zoom.renderHotlinks = function() {
  3952.     var list = Zoom.hotlinks;
  3953.     var ctx = Zoom.getContext();
  3954.     var _g1 = 0, _g = list.length;
  3955.     while(_g1 < _g) {
  3956.         var i = _g1++;
  3957.         var item = list[i];
  3958.         Zoom.renderHotlink(ctx,item);
  3959.     }
  3960. }
  3961. Zoom.renderHotlink = function(ctx,link) {
  3962.     link.loadToRect(ctx,Zoom.xOffset + link.x * Zoom.xScale,Zoom.yOffset + link.y * Zoom.yScale,link.width * Zoom.xScale,link.height * Zoom.yScale);
  3963. }
  3964. Zoom.renderVideos = function() {
  3965.     var dom = js.Lib.document.getElementById("cvsVideo");
  3966.     var _g1 = 0, _g = Zoom.videos.length;
  3967.     while(_g1 < _g) {
  3968.         var i = _g1++;
  3969.         var item = Zoom.videos[i];
  3970.         item.x = item.x * Zoom.xScale;
  3971.         if(item.youtubeId == null || item.youtubeId == "") dom.innerHTML += core.HtmlHelper.toRectVideoHtml(item,Zoom.xOffset + item.x * Zoom.xScale,Zoom.yOffset + item.y * Zoom.yScale,item.width * Zoom.xScale,item.height * Zoom.yScale); else dom.innerHTML += core.HtmlHelper.toRectYoutubeVideoHtml(item,Zoom.xOffset + item.x * Zoom.xScale,Zoom.yOffset + item.y * Zoom.yScale,item.width * Zoom.xScale,item.height * Zoom.yScale);
  3972.     }
  3973. }
  3974. Zoom.renderButtons = function() {
  3975.     var list = Zoom.buttons;
  3976.     var ctx = Zoom.getContext();
  3977.     var _g1 = 0, _g = list.length;
  3978.     while(_g1 < _g) {
  3979.         var i = _g1++;
  3980.         var item = list[i];
  3981.         item.loadToContext2DRect(ctx,Zoom.xOffset + item.x * Zoom.xScale,Zoom.yOffset + item.y * Zoom.yScale,item.width * Zoom.xScale,item.height * Zoom.yScale);
  3982.     }
  3983. }
  3984. Zoom.onDblClick = function(e) {
  3985.     Zoom.zoomOut();
  3986. }
  3987. Zoom.onZoom = function(e) {
  3988.     var date = new Date();
  3989.     if(Zoom.lastTouchTime != null) {
  3990.         var lastTime = Zoom.lastTouchTime.getTime();
  3991.         var newTime = date.getTime();
  3992.         if(newTime - lastTime < RunTime.doubleClickIntervalMs) {
  3993.             Zoom.lastTouchTime = null;
  3994.             Zoom.zoomOut();
  3995.             return;
  3996.         }
  3997.     }
  3998.     Zoom.lastTouchTime = date;
  3999.     var obj = e;
  4000.     var touch = obj.touches[0];
  4001.     if(obj.touches.length > 1) Zoom.zoomOut(); else Zoom.onClick(e);
  4002. }
  4003. Zoom.zoomOut = function(num) {
  4004.     if(num == null) num = -1;
  4005.     if(num == -1 || num == null) num = Std.parseInt(Zoom.pageNum);
  4006.     js.Lib.window.location.href = RunTime.urlIndex + "?page=" + Std.string(num) + "&bbv=" + Zoom.bbv + "&pcode=" + Zoom.pcode;
  4007. }
  4008. Zoom.onClick = function(e) {
  4009.     var match = null;
  4010.     var list = Zoom.hotlinks;
  4011.     var obj = e;
  4012.     var touch = obj.touches[0];
  4013.     var xx = touch.screenX;
  4014.     var yy = touch.screenY;
  4015.     Zoom.popupXOffset = xx - touch.clientX;
  4016.     Zoom.popupYOffset = yy - touch.clientY;
  4017.     var _g1 = 0, _g = list.length;
  4018.     while(_g1 < _g) {
  4019.         var i = _g1++;
  4020.         var link = list[i];
  4021.         if(xx >= Zoom.xOffset + link.x * Zoom.xScale && xx <= Zoom.xOffset + link.x * Zoom.xScale + link.width * Zoom.xScale && yy >= Zoom.yOffset + link.y * Zoom.yScale && yy <= Zoom.yOffset + link.y * Zoom.yScale + link.height * Zoom.yScale) {
  4022.             match = link;
  4023.             break;
  4024.         }
  4025.     }
  4026.     Zoom.invokeClickHotlink(match);
  4027.     var matchButton = null;
  4028.     var _g1 = 0, _g = Zoom.buttons.length;
  4029.     while(_g1 < _g) {
  4030.         var i = _g1++;
  4031.         var button = Zoom.buttons[i];
  4032.         if(xx >= Zoom.xOffset + button.x * Zoom.xScale && xx <= Zoom.xOffset + button.x * Zoom.xScale + button.width * Zoom.xScale && yy >= Zoom.yOffset + button.y * Zoom.yScale && yy <= Zoom.yOffset + button.y * Zoom.yScale + button.height * Zoom.yScale) {
  4033.             matchButton = button;
  4034.             break;
  4035.         }
  4036.     }
  4037.     Zoom.invokeClickButton(matchButton);
  4038. }
  4039. Zoom.invokeClickHotlink = function(link) {
  4040.     if(link == null) return;
  4041.     link.click(Zoom.popupXOffset,Zoom.popupYOffset);
  4042. }
  4043. Zoom.invokeClickButton = function(item) {
  4044.     if(item == null) return;
  4045.     item.click(Zoom.popupXOffset,Zoom.popupYOffset);
  4046. }
  4047. core.AudioInfo = function() {
  4048.     this.pageNum = -1;
  4049.     this.url = "";
  4050.     this.id = "";
  4051. };
  4052. core.AudioInfo.__name__ = true;
  4053. core.AudioInfo.prototype = {
  4054.     __class__: core.AudioInfo
  4055. }
  4056. core.BookContext = function() {
  4057.     this.pages = new Array();
  4058.     this.pageOffset = 0;
  4059.     this.scale = 1;
  4060.     this.offsetX = 0;
  4061.     this.offsetY = 0;
  4062. };
  4063. core.BookContext.__name__ = true;
  4064. core.BookContext.prototype = {
  4065.     getNoteAt: function(x,y) {
  4066.         if(this.notes == null) return null;
  4067.         var _g1 = 0, _g = this.notes.length;
  4068.         while(_g1 < _g) {
  4069.             var i = _g1++;
  4070.             var item = this.notes[i];
  4071.             if(item.hitTest(x,y) == true) return item;
  4072.         }
  4073.         return null;
  4074.     }
  4075.     ,getHighLightAt: function(x,y) {
  4076.         if(this.highlights == null) return null;
  4077.         var _g1 = 0, _g = this.highlights.length;
  4078.         while(_g1 < _g) {
  4079.             var i = _g1++;
  4080.             var item = this.highlights[i];
  4081.             if(item.hitTest(x,y) == true) return item;
  4082.         }
  4083.         return null;
  4084.     }
  4085.     ,getButtonAt: function(x,y) {
  4086.         if(this.buttons == null) return null;
  4087.         var _g1 = 0, _g = this.buttons.length;
  4088.         while(_g1 < _g) {
  4089.             var i = _g1++;
  4090.             var item = this.buttons[i];
  4091.             if(item.hitTest(x,y) == true) return item;
  4092.         }
  4093.         return null;
  4094.     }
  4095.     ,getHotLinkAt: function(x,y) {
  4096.         if(this.hotlinks == null) return null;
  4097.         var _g1 = 0, _g = this.hotlinks.length;
  4098.         while(_g1 < _g) {
  4099.             var i = _g1++;
  4100.             var item = this.hotlinks[i];
  4101.             if(item.hitTest(x,y) == true) return item;
  4102.         }
  4103.         return null;
  4104.     }
  4105.     ,render: function() {
  4106.         this.clear();
  4107.         if(this.pages != null && this.ctx != null) {
  4108.             var _g1 = 0, _g = this.pages.length;
  4109.             while(_g1 < _g) {
  4110.                 var i = _g1++;
  4111.                 var item = this.pages[i];
  4112.                 item.scale = this.scale;
  4113.                 item.offsetX = this.offsetX;
  4114.                 item.offsetY = this.offsetY;
  4115.                 item.visible = true;
  4116.                 item.loadToContext2D(this.ctx);
  4117.             }
  4118.         }
  4119.         if(this.hotlinks != null && this.ctx != null) {
  4120.             var _g1 = 0, _g = this.hotlinks.length;
  4121.             while(_g1 < _g) {
  4122.                 var i = _g1++;
  4123.                 var item = this.hotlinks[i];
  4124.                 item.scale = this.scale;
  4125.                 item.offsetX = this.offsetX;
  4126.                 item.offsetY = this.offsetY;
  4127.                 item.loadToContext2D(this.ctxButton);
  4128.             }
  4129.         }
  4130.         if(this.buttons != null && this.ctxButton != null) {
  4131.             var _g1 = 0, _g = this.buttons.length;
  4132.             while(_g1 < _g) {
  4133.                 var i = _g1++;
  4134.                 var item = this.buttons[i];
  4135.                 item.scale = this.scale;
  4136.                 item.offsetX = this.offsetX;
  4137.                 item.offsetY = this.offsetY;
  4138.                 item.loadToContext2D(this.ctxButton);
  4139.             }
  4140.         }
  4141.         if(this.highlights != null && this.ctxHighLight != null) {
  4142.             var _g1 = 0, _g = this.highlights.length;
  4143.             while(_g1 < _g) {
  4144.                 var i = _g1++;
  4145.                 var item = this.highlights[i];
  4146.                 item.scale = this.scale;
  4147.                 item.offsetX = this.offsetX;
  4148.                 item.offsetY = this.offsetY;
  4149.                 item.loadToContext2D(this.ctxHighLight);
  4150.             }
  4151.         }
  4152.         if(this.notes != null && this.ctxNote != null) {
  4153.             var _g1 = 0, _g = this.notes.length;
  4154.             while(_g1 < _g) {
  4155.                 var i = _g1++;
  4156.                 var item = this.notes[i];
  4157.                 item.scale = this.scale;
  4158.                 item.offsetX = this.offsetX;
  4159.                 item.offsetY = this.offsetY;
  4160.                 item.loadToContext2D(this.ctxNote);
  4161.             }
  4162.         }
  4163.         if(this.bookmarks != null && this.bookmarks.length > 0) {
  4164.             var _g1 = 0, _g = this.bookmarks.length;
  4165.             while(_g1 < _g) {
  4166.                 var i = _g1++;
  4167.                 var item = this.bookmarks[i];
  4168.                 item.loadToContext2D(this.ctxBookmark);
  4169.             }
  4170.         }
  4171.     }
  4172.     ,addPage: function(page) {
  4173.         if(page == null) return;
  4174.         if(this.pages == null) this.pages = new Array();
  4175.         page.bookContext = this;
  4176.         this.pages.push(page);
  4177.     }
  4178.     ,clear: function(removePages) {
  4179.         if(removePages == null) removePages = false;
  4180.         if(this.pages != null) {
  4181.             var _g1 = 0, _g = this.pages.length;
  4182.             while(_g1 < _g) {
  4183.                 var i = _g1++;
  4184.                 var item = this.pages[i];
  4185.                 item.visible = false;
  4186.             }
  4187.         }
  4188.         if(removePages == true) this.pages = new Array();
  4189.         if(this.ctx != null) this.ctx.clearRect(0,0,this.ctx.canvas.width,this.ctx.canvas.height);
  4190.         if(this.ctxButton != null) this.ctxButton.clearRect(0,0,this.ctxButton.canvas.width,this.ctxButton.canvas.height);
  4191.         if(this.ctxHighLight != null) this.ctxHighLight.clearRect(0,0,this.ctxHighLight.canvas.width,this.ctxHighLight.canvas.height);
  4192.         if(this.ctxNote != null) this.ctxNote.clearRect(0,0,this.ctxNote.canvas.width,this.ctxNote.canvas.height);
  4193.         if(this.ctxBookmark != null) this.ctxBookmark.clearRect(0,0,this.ctxBookmark.canvas.width,this.ctxBookmark.canvas.height);
  4194.     }
  4195.     ,removeAllPages: function() {
  4196.         if(this.pages != null) {
  4197.             var _g1 = 0, _g = this.pages.length;
  4198.             while(_g1 < _g) {
  4199.                 var i = _g1++;
  4200.                 var item = this.pages[i];
  4201.                 item.visible = false;
  4202.             }
  4203.         }
  4204.         this.pages = new Array();
  4205.     }
  4206.     ,resetLayoutParams: function() {
  4207.         this.offsetX = 0;
  4208.         this.offsetY = 0;
  4209.         this.scale = 1;
  4210.     }
  4211.     ,getPageCount: function() {
  4212.         return this.pages.length;
  4213.     }
  4214.     ,__class__: core.BookContext
  4215. }
  4216. core.Bookmark = function() {
  4217.     this.onlyread = false;
  4218.     var _g = this;
  4219.     this.bookmarkImg = js.Lib.document.createElement("img");
  4220.     this.bookmarkImg.onload = function() {
  4221.         _g.bookImgLoaded = true;
  4222.     };
  4223.     this.bookmarkImg.src = RunTime.urlRoot + "content/images/bookmark.png";
  4224. };
  4225. core.Bookmark.__name__ = true;
  4226. core.Bookmark.prototype = {
  4227.     loadToContext2D: function(ctx) {
  4228.         if(ctx != null && this.bookImgLoaded) {
  4229.             ctx.save();
  4230.             ctx.drawImage(this.bookmarkImg,(RunTime.clientWidth | 0) - 40,52);
  4231.             ctx.restore();
  4232.         }
  4233.     }
  4234.     ,clone: function() {
  4235.         var bookmark = new core.Bookmark();
  4236.         bookmark.guid = this.guid;
  4237.         bookmark.pageNum = this.pageNum;
  4238.         bookmark.text = this.text;
  4239.         return bookmark;
  4240.     }
  4241.     ,remove: function() {
  4242.         localStorage.removeItem(this.guid);
  4243.     }
  4244.     ,fillData: function(guid,json) {
  4245.         var objJSON = JSON.parse(json);
  4246.         this.pageNum = Std.parseInt(objJSON.obj[0].pageNum);
  4247.         this.text = objJSON.obj[0].text;
  4248.         this.guid = guid;
  4249.     }
  4250.     ,save: function() {
  4251.         this.guid = RunTime.kvPrex + "@$bm$@" + new Date().getTime();
  4252.         localStorage.setItem(this.guid,this.toJSONString());
  4253.     }
  4254.     ,toJSONString: function() {
  4255.         var json = "{\"obj\":[{\"pageNum\":\"" + this.pageNum + "\",\"text\":\"" + this.text + "\"}]}";
  4256.         return json;
  4257.     }
  4258.     ,__class__: core.Bookmark
  4259. }
  4260. core.ButtonInfo = function() {
  4261.     this.window_color = "#333333";
  4262.     this.target = "_blank";
  4263.     this.fontSize = "12";
  4264.     this.fontColor = "#ffffff";
  4265.     this.text = "";
  4266.     this.layer = "onpage";
  4267.     this.pageLayoutType = 0;
  4268.     this.scale = 1;
  4269.     this.offsetX = 0;
  4270.     this.offsetY = 0;
  4271. };
  4272. core.ButtonInfo.__name__ = true;
  4273. core.ButtonInfo.prototype = {
  4274.     click: function(popupXOffset,popupYOffset) {
  4275.         if(popupYOffset == null) popupYOffset = 0;
  4276.         if(popupXOffset == null) popupXOffset = 0;
  4277.         switch(this.type) {
  4278.         case "":
  4279.             if(this.destination != null) {
  4280.                 if(this.destination.indexOf("page:") == 0) {
  4281.                     var val = HxOverrides.substr(this.destination,5,null);
  4282.                     var num = Std.parseInt(val);
  4283.                     if(RunTime.flipBook != null) RunTime.flipBook.turnToPage(num - 1); else Zoom.zoomOut(num - 1);
  4284.                 } else if(this.destination.indexOf("mailto:") == 0) {
  4285.                     RunTime.logClickLink(this.destination);
  4286.                     js.Lib.window.location.href = this.destination;
  4287.                 } else if(this.destination.indexOf("fun:") == 0) {
  4288.                     var fun = HxOverrides.substr(this.destination,4,null);
  4289.                     if(fun == "content") RunTime.flipBook.onContentsClick(null); else if(fun == "thumb") RunTime.flipBook.onThumbsClick(null); else if(fun == "showtxt") RunTime.flipBook.onShowTxtClick(null); else if(fun == "highlight") RunTime.flipBook.onButtonMaskClick(null); else if(fun == "bookmark") RunTime.flipBook.onButtonBookmark(null); else if(fun == "notes") RunTime.flipBook.onButtonNoteClick(null); else if(fun == "autoflip") RunTime.flipBook.onAutoFlipClick(null); else if(fun == "download") RunTime.onDownloadClick(null); else if(fun == "fliptofront") RunTime.flipBook.turnToFirstPage(null); else if(fun == "flipleft") RunTime.flipBook.turnToPrevPage(null); else if(fun == "flipright") RunTime.flipBook.turnToNextPage(null); else if(fun == "fliptoback") RunTime.flipBook.turnToLastPage(null);
  4290.                 } else {
  4291.                     RunTime.logClickLink(this.destination);
  4292.                     if("_self" == this.target) js.Lib.window.location.href = this.destination; else js.Lib.window.open(this.destination,this.target);
  4293.                 }
  4294.             }
  4295.             break;
  4296.         case "image":
  4297.             RunTime.showPopupMaskLayer();
  4298.             RunTime.setOffset(js.Lib.document.getElementById("cvsOthers"),popupXOffset,popupYOffset);
  4299.             core.HtmlHelper.toPopupImageHtml(this,function(txt) {
  4300.                 js.Lib.document.getElementById("cvsOthers").innerHTML = txt;
  4301.                 js.Lib.document.getElementById("popupImage").style.cssText += " -webkit-transform: scale(1); -webkit-transition: 0.5s ease-out; ";
  4302.             });
  4303.             RunTime.logClickLink(this.destination);
  4304.             break;
  4305.         case "video":
  4306.             RunTime.showPopupMaskLayer();
  4307.             RunTime.setOffset(js.Lib.document.getElementById("cvsOthers"),popupXOffset,popupYOffset);
  4308.             js.Lib.document.getElementById("cvsOthers").innerHTML = core.HtmlHelper.toPopupVideoHtml(this);
  4309.             js.Lib.document.getElementById("popupVideo").style.cssText += " -webkit-transform: scale(1); -webkit-transition: 0.5s ease-out; ";
  4310.             RunTime.playVideo();
  4311.             RunTime.logVideoView(this.destination,this.youtubeId);
  4312.             break;
  4313.         case "audio":
  4314.             RunTime.flipBook.showPopupAudio(this);
  4315.             RunTime.logAudioView(this.destination);
  4316.             RunTime.playAudio();
  4317.             break;
  4318.         case "message":
  4319.             RunTime.showPopupMaskLayer();
  4320.             RunTime.setOffset(js.Lib.document.getElementById("cvsOthers"),popupXOffset,popupYOffset);
  4321.             js.Lib.document.getElementById("cvsOthers").innerHTML = core.HtmlHelper.toPopupHtml(this);
  4322.             js.Lib.document.getElementById("popupMessage").style.cssText += " -webkit-transform: scale(1); -webkit-transition: 0.5s ease-out; ";
  4323.             break;
  4324.         case "message-hover":
  4325.             RunTime.showPopupMaskLayer();
  4326.             RunTime.setOffset(js.Lib.document.getElementById("cvsOthers"),popupXOffset,popupYOffset);
  4327.             js.Lib.document.getElementById("cvsOthers").innerHTML = core.HtmlHelper.toPopupHtml(this);
  4328.             js.Lib.document.getElementById("popupMessage").style.cssText += " -webkit-transform: scale(1); -webkit-transition: 0.5s ease-out; ";
  4329.             break;
  4330.         }
  4331.     }
  4332.     ,hitTest: function(mouseX,mouseY) {
  4333.         if(this.type == "none") return false;
  4334.         var dp = this.getDrawParams();
  4335.         var xx = dp.dx + (this.x - dp.sx) * (dp.dw / dp.sw);
  4336.         var yy = dp.dy + (this.y - dp.sy) * (dp.dh / dp.sh);
  4337.         var ww = this.width * (dp.dw / dp.sw);
  4338.         var hh = this.height * (dp.dh / dp.sh);
  4339.         var result = mouseX >= xx && mouseY >= yy && mouseX <= xx + ww && mouseY <= yy + hh;
  4340.         return result;
  4341.     }
  4342.     ,loadToRect: function(ctx,x,y,w,h) {
  4343.         if(w > 0 && h > 0) {
  4344.             if(this.text == "") ctx.drawImage(this._imagePage,0,0,this._imagePage.width,this._imagePage.height,x,y,w,h); else {
  4345.                 ctx.save();
  4346.                 ctx.fillStyle = this.fontColor;
  4347.                 ctx.font = this.fontSize + "px " + "san-serif";
  4348.                 ctx.fillText(this.text,x,y + 30);
  4349.                 ctx.restore();
  4350.             }
  4351.         }
  4352.     }
  4353.     ,loadToContext2DRect: function(ctx,x,y,w,h) {
  4354.         this.ctx = ctx;
  4355.         if(this._imagePage == null) {
  4356.             var self = this;
  4357.             this.getImagePage(function() {
  4358.                 self.loaded = true;
  4359.                 self.loadToContext2DRect(self.ctx,self.x,self.y,self.width,self.height);
  4360.             });
  4361.         }
  4362.         if(this.loaded == true) this.loadToRect(ctx,x,y,this.width,this.height);
  4363.     }
  4364.     ,loadToContext2D: function(ctx) {
  4365.         this.ctx = ctx;
  4366.         if(this._imagePage == null) {
  4367.             var self = this;
  4368.             this.getImagePage(function() {
  4369.                 self.loaded = true;
  4370.                 self.loadToContext2D(self.ctx);
  4371.             });
  4372.         }
  4373.         if(this.loaded == true) {
  4374.             var dp = this.getDrawParams();
  4375.             var xx = dp.dx + (this.x - dp.sx) * (dp.dw / dp.sw);
  4376.             var yy = dp.dy + (this.y - dp.sy) * (dp.dh / dp.sh);
  4377.             var ww = this.width * (dp.dw / dp.sw);
  4378.             var hh = this.height * (dp.dh / dp.sh);
  4379.             this.loadToRect(ctx,xx,yy,ww,hh);
  4380.         }
  4381.     }
  4382.     ,getImagePage: function(onloadFunc) {
  4383.         if(this._imagePage != null) return this._imagePage;
  4384.         var img = new Image();
  4385.         img.src = this.image;
  4386.         img.onload = onloadFunc;
  4387.         this._imagePage = img;
  4388.         return this._imagePage;
  4389.     }
  4390.     ,getDrawParams: function() {
  4391.         var dp = RunTime.getDrawParams(this.pageLayoutType);
  4392.         if(this.pageLayoutType == 2) dp = RunTime.getGolobaDrawParams();
  4393.         dp.applyTransform(this.scale,this.offsetX,this.offsetY);
  4394.         return dp;
  4395.     }
  4396.     ,__class__: core.ButtonInfo
  4397. }
  4398. core.DrawParams = function() {
  4399. };
  4400. core.DrawParams.__name__ = true;
  4401. core.DrawParams.prototype = {
  4402.     sliceRight: function(ratio,xOffset) {
  4403.         if(xOffset == null) xOffset = 0;
  4404.         if(ratio < 0) ratio = 0; else if(ratio > 1) ratio = 1;
  4405.         var dp = new core.DrawParams();
  4406.         dp.sx = this.sx + this.sw * (1 - ratio);
  4407.         dp.sy = this.sy;
  4408.         dp.dx = this.dx + this.dw * (1 - ratio) + xOffset;
  4409.         dp.dy = this.dy;
  4410.         dp.sw = this.sw * ratio;
  4411.         dp.sh = this.sh;
  4412.         dp.dw = this.dw * ratio;
  4413.         dp.dh = this.dh;
  4414.         return dp;
  4415.     }
  4416.     ,sliceLeft: function(ratio,xOffset) {
  4417.         if(xOffset == null) xOffset = 0;
  4418.         if(ratio < 0) ratio = 0; else if(ratio > 1) ratio = 1;
  4419.         var dp = new core.DrawParams();
  4420.         dp.sx = this.sx;
  4421.         dp.sy = this.sy;
  4422.         dp.dx = this.dx + xOffset;
  4423.         dp.dy = this.dy;
  4424.         dp.sw = this.sw * ratio;
  4425.         dp.sh = this.sh;
  4426.         dp.dw = this.dw * ratio;
  4427.         dp.dh = this.dh;
  4428.         return dp;
  4429.     }
  4430.     ,toString: function() {
  4431.         return Std.string(this.sx) + "," + Std.string(this.sy) + "," + Std.string(this.sw) + "," + Std.string(this.sh) + "," + Std.string(this.dx) + "," + Std.string(this.dy) + "," + Std.string(this.dw) + "," + Std.string(this.dh);
  4432.     }
  4433.     ,applyTransform: function(scale,offsetX,offsetY) {
  4434.         this.dx = this.dx * scale + offsetX;
  4435.         this.dy = this.dy * scale + offsetY;
  4436.         this.dw = this.dw * scale;
  4437.         this.dh = this.dh * scale;
  4438.     }
  4439.     ,clone: function() {
  4440.         var dw = new core.DrawParams();
  4441.         dw.sx = this.sx;
  4442.         dw.sy = this.sy;
  4443.         dw.sw = this.sw;
  4444.         dw.sh = this.sh;
  4445.         dw.dx = this.dx;
  4446.         dw.dy = this.dy;
  4447.         dw.dw = this.dw;
  4448.         dw.dh = this.dh;
  4449.         return dw;
  4450.     }
  4451.     ,scaleY: function() {
  4452.         return this.dh / this.sh;
  4453.     }
  4454.     ,scaleX: function() {
  4455.         return this.dw / this.sw;
  4456.     }
  4457.     ,dhi: function() {
  4458.         return Math.round(this.dh);
  4459.     }
  4460.     ,dwi: function() {
  4461.         return Math.round(this.dw);
  4462.     }
  4463.     ,dyi: function() {
  4464.         return Math.round(this.dy);
  4465.     }
  4466.     ,dxi: function() {
  4467.         return Math.round(this.dx);
  4468.     }
  4469.     ,__class__: core.DrawParams
  4470. }
  4471. core.HighLight = function() {
  4472.     this.note = new core.Note();
  4473.     this.x = 0;
  4474.     this.y = 0;
  4475.     this.width = 0;
  4476.     this.height = 0;
  4477.     this.pageNum = -1;
  4478.     this.guid = "";
  4479.     this.color = "";
  4480.     this.checked = false;
  4481.     this.pageLayoutType = 0;
  4482.     this.scale = 1;
  4483.     this.offsetX = 0;
  4484.     this.offsetY = 0;
  4485. };
  4486. core.HighLight.__name__ = true;
  4487. core.HighLight.prototype = {
  4488.     click: function(popupXOffset,popupYOffset) {
  4489.         if(popupYOffset == null) popupYOffset = 0;
  4490.         if(popupXOffset == null) popupXOffset = 0;
  4491.         RunTime.showPopupMaskLayer();
  4492.         RunTime.setOffset(js.Lib.document.getElementById("cvsOthers"),popupXOffset,popupYOffset);
  4493.         js.Lib.document.getElementById("cvsOthers").innerHTML = core.HtmlHelper.toHighLightPopupHtml(this,"saveHighlightNote","deleteHighlightNote");
  4494.         js.Lib.document.getElementById("textNote").focus();
  4495.     }
  4496.     ,hitTest: function(mouseX,mouseY) {
  4497.         var dp = this.getDrawParams();
  4498.         var xx = dp.dx + (this.x - dp.sx) * (dp.dw / dp.sw);
  4499.         var yy = dp.dy + (this.y - dp.sy) * (dp.dh / dp.sh);
  4500.         var ww = this.width * (dp.dw / dp.sw);
  4501.         var hh = this.height * (dp.dh / dp.sh);
  4502.         var result = mouseX >= xx && mouseY >= yy && mouseX <= xx + ww && mouseY <= yy + hh;
  4503.         return result;
  4504.     }
  4505.     ,draw: function(context) {
  4506.         var radius = 5;
  4507.         context.save();
  4508.         context.fillStyle = "rgba(0,255,0,0.4)";
  4509.         context.fillRect(this.tx | 0,this.ty | 0,this.twidth | 0,this.theight | 0);
  4510.         context.restore();
  4511.         if(this.note != null) {
  4512.             this.note.x = this.tx;
  4513.             this.note.y = this.ty - this.note.image.height;
  4514.             this.note.draw();
  4515.         }
  4516.     }
  4517.     ,loadToContext2D: function(context) {
  4518.         var radius = 5;
  4519.         context.save();
  4520.         if(this.color != "") context.fillStyle = this.color; else context.fillStyle = "rgba(0,255,0,0.4)";
  4521.         var dp = this.getDrawParams();
  4522.         var xx = dp.dx + (this.x - dp.sx) * (dp.dw / dp.sw);
  4523.         var yy = dp.dy + (this.y - dp.sy) * (dp.dh / dp.sh);
  4524.         var ww = this.width * (dp.dw / dp.sw);
  4525.         var hh = this.height * (dp.dh / dp.sh);
  4526.         context.fillRect(xx | 0,yy | 0,ww | 0,hh | 0);
  4527.         context.restore();
  4528.         if(this.note != null) {
  4529.             this.note.x = this.x;
  4530.             this.note.y = this.y - this.note.image.height;
  4531.             this.note.draw();
  4532.         }
  4533.     }
  4534.     ,remove: function() {
  4535.         localStorage.removeItem(this.guid);
  4536.     }
  4537.     ,updateText: function(text,color) {
  4538.         this.note.text = text;
  4539.         this.color = "rgba(" + color + ",0.4)";
  4540.         localStorage.setItem(this.guid,this.toJSONString());
  4541.     }
  4542.     ,setChecked: function(bChecked) {
  4543.         this.checked = bChecked;
  4544.         if(this.checked) {
  4545.         } else {
  4546.         }
  4547.     }
  4548.     ,fillData: function(guid,json) {
  4549.         var objJSON = JSON.parse(json);
  4550.         this.x = Std.parseFloat(objJSON.obj[0].x);
  4551.         this.y = Std.parseFloat(objJSON.obj[0].y);
  4552.         this.width = Std.parseFloat(objJSON.obj[0].width);
  4553.         this.height = Std.parseFloat(objJSON.obj[0].height);
  4554.         this.note.text = objJSON.obj[0].note;
  4555.         this.pageNum = Std.parseInt(objJSON.obj[0].page);
  4556.         this.color = Std.string(objJSON.obj[0].color);
  4557.         this.guid = guid;
  4558.     }
  4559.     ,DataTransform: function() {
  4560.         var dp = this.getDrawParams();
  4561.         this.pageNum = this.tpageNum;
  4562.         if(RunTime.singlePage) {
  4563.         } else if(RunTime.book.rightToLeft) {
  4564.             if(this.tx > RunTime.clientWidth / 2) dp = this.getLeftDrawParams(); else dp = this.getRightDrawParams();
  4565.         } else if(this.tx > RunTime.clientWidth / 2) dp = this.getRightDrawParams(); else dp = this.getLeftDrawParams();
  4566.         this.x = dp.sx + (this.tx - dp.dx) / (dp.dw / dp.sw);
  4567.         this.y = dp.sy + (this.ty - dp.dy) / (dp.dh / dp.sh);
  4568.         this.width = this.twidth / (dp.dw / dp.sw);
  4569.         this.height = this.theight / (dp.dh / dp.sh);
  4570.         haxe.Log.trace("x=" + this.x + ",y=" + this.y + ",width=" + this.width + ",height=" + this.height,{ fileName : "HighLight.hx", lineNumber : 205, className : "core.HighLight", methodName : "DataTransform"});
  4571.     }
  4572.     ,save: function() {
  4573.         if(this.twidth == 0 || this.theight == 0) return;
  4574.         this.guid = RunTime.kvPrex + "@$ht$@" + new Date().getTime();
  4575.         this.DataTransform();
  4576.         localStorage.setItem(this.guid,this.toJSONString());
  4577.     }
  4578.     ,toJSONString: function() {
  4579.         var json = "{\"obj\":[{\"x\":\"" + this.x + "\",\"y\":\"" + this.y + "\",\"width\":\"" + this.width + "\",\"height\":\"" + this.height + "\",\"page\":\"" + this.pageNum + "\",\"color\":\"" + this.color + "\",\"note\":\"" + this.note.text + "\"}]}";
  4580.         return json;
  4581.     }
  4582.     ,getBottom: function() {
  4583.         return this.y + this.height;
  4584.     }
  4585.     ,getTop: function() {
  4586.         return this.y;
  4587.     }
  4588.     ,getRight: function() {
  4589.         return this.x + this.width;
  4590.     }
  4591.     ,getLeft: function() {
  4592.         return this.x;
  4593.     }
  4594.     ,getContext: function() {
  4595.         return this.canvas.getContext("2d");
  4596.     }
  4597.     ,setCanvas: function(canvas) {
  4598.         this.canvas = canvas;
  4599.         if(this.note != null) this.note.setCanvas(this.canvas);
  4600.     }
  4601.     ,clone: function() {
  4602.         this.DataTransform();
  4603.         var hl = new core.HighLight();
  4604.         hl.x = this.x;
  4605.         hl.y = this.y;
  4606.         hl.width = this.width;
  4607.         hl.height = this.height;
  4608.         hl.pageNum = this.pageNum;
  4609.         hl.guid = this.guid;
  4610.         hl.color = this.color;
  4611.         hl.note.text = this.note.text;
  4612.         return hl;
  4613.     }
  4614.     ,getRightDrawParams: function() {
  4615.         var dp = RunTime.getDrawParams(1);
  4616.         dp.applyTransform(this.scale,this.offsetX,this.offsetY);
  4617.         return dp;
  4618.     }
  4619.     ,getLeftDrawParams: function() {
  4620.         var dp = RunTime.getDrawParams(-1);
  4621.         dp.applyTransform(this.scale,this.offsetX,this.offsetY);
  4622.         return dp;
  4623.     }
  4624.     ,getDrawParams: function() {
  4625.         var dp = RunTime.getDrawParams(this.pageLayoutType);
  4626.         dp.applyTransform(this.scale,this.offsetX,this.offsetY);
  4627.         return dp;
  4628.     }
  4629.     ,__class__: core.HighLight
  4630. }
  4631. core.HotLink = function() {
  4632.     this.window_color = "#333333";
  4633.     this.target = "_blank";
  4634.     this.opacity = 0.8;
  4635.     this.pageLayoutType = 0;
  4636.     this.color = "#333333";
  4637.     this.scale = 1;
  4638.     this.offsetX = 0;
  4639.     this.offsetY = 0;
  4640. };
  4641. core.HotLink.__name__ = true;
  4642. core.HotLink.prototype = {
  4643.     click: function(popupXOffset,popupYOffset) {
  4644.         if(popupYOffset == null) popupYOffset = 0;
  4645.         if(popupXOffset == null) popupXOffset = 0;
  4646.         switch(this.type) {
  4647.         case "":
  4648.             if(this.destination != null) {
  4649.                 if(this.destination.indexOf("page:") == 0) {
  4650.                     var val = HxOverrides.substr(this.destination,5,null);
  4651.                     var num = Std.parseInt(val);
  4652.                     if(RunTime.flipBook != null) RunTime.flipBook.turnToPage(num - 1); else Zoom.zoomOut(num - 1);
  4653.                 } else if(this.destination.indexOf("mailto:") == 0) {
  4654.                     RunTime.logClickLink(this.destination);
  4655.                     js.Lib.window.location.href = this.destination;
  4656.                 } else if(this.destination.indexOf("fun:") == 0) {
  4657.                     var fun = HxOverrides.substr(this.destination,4,null);
  4658.                     if(fun == "content") RunTime.flipBook.onContentsClick(null); else if(fun == "thumb") RunTime.flipBook.onThumbsClick(null); else if(fun == "showtxt") RunTime.flipBook.onShowTxtClick(null); else if(fun == "highlight") RunTime.flipBook.onButtonMaskClick(null); else if(fun == "bookmark") RunTime.flipBook.onButtonBookmark(null); else if(fun == "notes") RunTime.flipBook.onButtonNoteClick(null); else if(fun == "autoflip") RunTime.flipBook.onAutoFlipClick(null); else if(fun == "download") RunTime.onDownloadClick(null); else if(fun == "fliptofront") RunTime.flipBook.turnToFirstPage(null); else if(fun == "flipleft") RunTime.flipBook.turnToPrevPage(null); else if(fun == "flipright") RunTime.flipBook.turnToNextPage(null); else if(fun == "fliptoback") RunTime.flipBook.turnToLastPage(null);
  4659.                 } else {
  4660.                     RunTime.logClickLink(this.destination);
  4661.                     if("_self" == this.target) js.Lib.window.location.href = this.destination; else js.Lib.window.open(this.destination,this.target);
  4662.                 }
  4663.             }
  4664.             break;
  4665.         case "image":
  4666.             RunTime.showPopupMaskLayer();
  4667.             RunTime.setOffset(js.Lib.document.getElementById("cvsOthers"),popupXOffset,popupYOffset);
  4668.             core.HtmlHelper.toPopupImageHtml(this,function(txt) {
  4669.                 js.Lib.document.getElementById("cvsOthers").innerHTML = txt;
  4670.                 js.Lib.document.getElementById("popupImage").style.cssText += " -webkit-transform: scale(1); -webkit-transition: 0.5s ease-out; ";
  4671.             });
  4672.             RunTime.logClickLink(this.destination);
  4673.             break;
  4674.         case "video":
  4675.             RunTime.showPopupMaskLayer();
  4676.             RunTime.setOffset(js.Lib.document.getElementById("cvsOthers"),popupXOffset,popupYOffset);
  4677.             js.Lib.document.getElementById("cvsOthers").innerHTML = core.HtmlHelper.toPopupVideoHtml(this);
  4678.             js.Lib.document.getElementById("popupVideo").style.cssText += " -webkit-transform: scale(1); -webkit-transition: 0.5s ease-out; ";
  4679.             RunTime.playVideo();
  4680.             RunTime.logVideoView(this.destination,this.youtubeId);
  4681.             break;
  4682.         case "audio":
  4683.             RunTime.flipBook.showPopupAudio(this);
  4684.             RunTime.logAudioView(this.destination);
  4685.             RunTime.playAudio();
  4686.             break;
  4687.         case "message":
  4688.             RunTime.showPopupMaskLayer();
  4689.             RunTime.setOffset(js.Lib.document.getElementById("cvsOthers"),popupXOffset,popupYOffset);
  4690.             js.Lib.document.getElementById("cvsOthers").innerHTML = core.HtmlHelper.toPopupHtml(this);
  4691.             js.Lib.document.getElementById("popupMessage").style.cssText += " -webkit-transform: scale(1); -webkit-transition: 0.5s ease-out; ";
  4692.             break;
  4693.         case "message-hover":
  4694.             RunTime.showPopupMaskLayer();
  4695.             RunTime.setOffset(js.Lib.document.getElementById("cvsOthers"),popupXOffset,popupYOffset);
  4696.             js.Lib.document.getElementById("cvsOthers").innerHTML = core.HtmlHelper.toPopupHtml(this);
  4697.             js.Lib.document.getElementById("popupMessage").style.cssText += " -webkit-transform: scale(1); -webkit-transition: 0.5s ease-out; ";
  4698.             break;
  4699.         }
  4700.     }
  4701.     ,hitTest: function(mouseX,mouseY) {
  4702.         var dp = this.getDrawParams();
  4703.         var xx = dp.dx + (this.x - dp.sx) * (dp.dw / dp.sw);
  4704.         var yy = dp.dy + (this.y - dp.sy) * (dp.dh / dp.sh);
  4705.         var ww = this.width * (dp.dw / dp.sw);
  4706.         var hh = this.height * (dp.dh / dp.sh);
  4707.         var result = mouseX >= xx && mouseY >= yy && mouseX <= xx + ww && mouseY <= yy + hh;
  4708.         return result;
  4709.     }
  4710.     ,loadToContext2D: function(ctx) {
  4711.         var dp = this.getDrawParams();
  4712.         var xx = dp.dx + (this.x - dp.sx) * (dp.dw / dp.sw);
  4713.         var yy = dp.dy + (this.y - dp.sy) * (dp.dh / dp.sh);
  4714.         var ww = this.width * (dp.dw / dp.sw);
  4715.         var hh = this.height * (dp.dh / dp.sh);
  4716.         this.loadToRect(ctx,xx,yy,ww,hh);
  4717.     }
  4718.     ,loadToRect: function(ctx,x,y,w,h) {
  4719.         if(w > 0 && h > 0) {
  4720.             ctx.fillStyle = orc.utils.DrawHelper.createFillStyle(this.color,this.opacity);
  4721.             ctx.fillRect(x | 0,y | 0,w | 0,h | 0);
  4722.         }
  4723.     }
  4724.     ,getDrawParams: function() {
  4725.         var dp = RunTime.getDrawParams(this.pageLayoutType);
  4726.         dp.applyTransform(this.scale,this.offsetX,this.offsetY);
  4727.         return dp;
  4728.     }
  4729.     ,__class__: core.HotLink
  4730. }
  4731. core.Html5Image = function(url,onLoad) {
  4732.     this.url = url;
  4733.     this.onload = onLoad;
  4734.     this.image = new Image();
  4735.     this.image.onload = this.onload;
  4736.     this.image.src = url;
  4737. };
  4738. core.Html5Image.__name__ = true;
  4739. core.Html5Image.prototype = {
  4740.     __class__: core.Html5Image
  4741. }
  4742. core.HtmlHelper = function() { }
  4743. core.HtmlHelper.__name__ = true;
  4744. core.HtmlHelper.toContentsHtml = function(xml) {
  4745.     var roots = orc.utils.Util.getXmlChilds(xml);
  4746.     if(roots.length != 1) return "";
  4747.     var root = roots[0];
  4748.     var childs = orc.utils.Util.getXmlChilds(root);
  4749.     var s = "";
  4750.     if(childs.length > 0) {
  4751.         var _g1 = 0, _g = childs.length;
  4752.         while(_g1 < _g) {
  4753.             var i = _g1++;
  4754.             s += core.HtmlHelper.toContentsNodeHtml(childs[i],0);
  4755.         }
  4756.     }
  4757.     return s;
  4758. }
  4759. core.HtmlHelper.toContentsNodeHtml = function(xml,index) {
  4760.     var childs = orc.utils.Util.getXmlChilds(xml);
  4761.     var s = "";
  4762.     s += "<ul>";
  4763.     s += "<li>";
  4764.     s += core.HtmlHelper.toContentsNodeHtmlCore(xml,index);
  4765.     s += "</li>";
  4766.     if(childs.length > 0) {
  4767.         core.HtmlHelper.lv++;
  4768.         s += "<ul>";
  4769.         var _g1 = 0, _g = childs.length;
  4770.         while(_g1 < _g) {
  4771.             var i = _g1++;
  4772.             s += core.HtmlHelper.toContentsNodeHtml(childs[i],core.HtmlHelper.lv);
  4773.         }
  4774.         s += "</ul>";
  4775.     }
  4776.     s += "</ul>";
  4777.     return s;
  4778. }
  4779. core.HtmlHelper.toContentsNodeHtmlCore = function(xml,index) {
  4780.     var title = xml.get("title");
  4781.     var page = xml.get("page");
  4782.     var pageVal = 0;
  4783.     if(page != null && page != "") {
  4784.         pageVal = Std.parseInt(page);
  4785.         page = Std.string(pageVal - 1);
  4786.     }
  4787.     var t = "";
  4788.     if(index == 0) {
  4789.         t = "";
  4790.         core.HtmlHelper.lv = 0;
  4791.     } else {
  4792.         var _g = 0;
  4793.         while(_g < index) {
  4794.             var i = _g++;
  4795.             t += "  ";
  4796.         }
  4797.     }
  4798.     return "<span onclick=\"gotoPage(" + page + ");\">" + t + title + "</span>";
  4799. }
  4800. core.HtmlHelper.toSnsHtml = function(xml) {
  4801.     var roots = orc.utils.Util.getXmlChilds(xml);
  4802.     if(roots.length != 1) return "";
  4803.     var root = roots[0];
  4804.     var childs = orc.utils.Util.getXmlChilds(root);
  4805.     var s = "";
  4806.     s += "<div id='snsbox' style='float:left;width: 100%;height: 250px;'>";
  4807.     if(childs.length > 0) {
  4808.         var _g1 = 0, _g = childs.length;
  4809.         while(_g1 < _g) {
  4810.             var i = _g1++;
  4811.             s += core.HtmlHelper.toSnsNodeHtml(childs[i]);
  4812.         }
  4813.     }
  4814.     s += "</div>";
  4815.     return s;
  4816. }
  4817. core.HtmlHelper.toSnsNodeHtml = function(xml) {
  4818.     var s = "<p style='float:left;width:150px;height:38px;'>";
  4819.     s += "<a href='" + xml.get("href") + "'><img style='vertical-align:middle;' src='" + RunTime.urlRoot + xml.get("logoUrl") + "'>" + "</a>";
  4820.     s += "<span onclick=\"RunTime.navigateUrl('" + xml.get("href") + "')\" style='vertical-align:middle;'> " + xml.get("name") + "</span>";
  4821.     s += "</p>";
  4822.     return s;
  4823. }
  4824. core.HtmlHelper.toAboutHtml = function(aboutXml,bookinfoXml) {
  4825.     var aboutRoots = orc.utils.Util.getXmlChilds(aboutXml);
  4826.     if(aboutRoots.length != 1) return "";
  4827.     var aboutRoot = aboutRoots[0];
  4828.     var bookinfoRoots = orc.utils.Util.getXmlChilds(bookinfoXml);
  4829.     if(bookinfoRoots.length != 1) return "";
  4830.     var bookinfoRoot = bookinfoRoots[0];
  4831.     var logoUrl = aboutRoot.get("logo");
  4832.     var text = aboutRoot.firstChild().getNodeValue();
  4833.     var bookTitle = bookinfoRoot.get("title");
  4834.     var bookAuthor = bookinfoRoot.get("author");
  4835.     var companyName = bookinfoRoot.get("companyName");
  4836.     var companyUrl = bookinfoRoot.get("companyUrl");
  4837.     var companyAddress = bookinfoRoot.get("companyAddress");
  4838.     var companyEmail = bookinfoRoot.get("email");
  4839.     var companyTel = bookinfoRoot.get("tel");
  4840.     var l_bookTitle = L.s("BookTitle","Book Title");
  4841.     var l_bookAuthor = L.s("BookAuthor","Book Author");
  4842.     var l_companyName = L.s("CompanyName","Company Name");
  4843.     var l_companyUrl = L.s("CompanyUrl","Company Url");
  4844.     var l_companyAddress = L.s("CompanyAddress","Address");
  4845.     var l_companyEmail = L.s("CompanyEmail","Email");
  4846.     var l_companyTel = L.s("CompanyTel","Tel");
  4847.     var aboutUsText = "";
  4848.     if(bookTitle != "") aboutUsText += l_bookTitle + ":" + bookTitle + "<br />";
  4849.     if(bookAuthor != "") aboutUsText += l_bookAuthor + ":" + bookAuthor + "<br />";
  4850.     if(companyName != "") aboutUsText += l_companyName + ":" + companyName + "<br />";
  4851.     if(companyUrl != "") aboutUsText += l_companyUrl + ":" + companyUrl + "<br />";
  4852.     if(companyAddress != "") aboutUsText += l_companyAddress + ":" + companyAddress + "<br />";
  4853.     if(companyEmail != "") aboutUsText += l_companyEmail + ":" + companyEmail + "<br />";
  4854.     if(companyTel != "") aboutUsText += l_companyTel + ":" + companyTel + "<br />";
  4855.     var s = "";
  4856.     s += "<div style='width:100%; height:280px;'>";
  4857.     s += "<div style='width:30%; height:160px; float:left;'>";
  4858.     if(logoUrl != "") s += "<img src='" + logoUrl + "'/>";
  4859.     s += "</div>";
  4860.     s += "<div style='width:65%; height:160px; float:left;'>" + aboutUsText + "</a></div>";
  4861.     s += "<div style='width:100%; height:110px;'>" + text + "</div>";
  4862.     s += "</div>";
  4863.     return s;
  4864. }
  4865. core.HtmlHelper.toEmailHtml = function() {
  4866.     var s = "";
  4867.     s += "<form id='sendEmail' action='" + RunTime.book.gateway + "' method='post'>";
  4868.     s += "<table border='none' class='email'>";
  4869.     s += "<tr><td>" + L.s("To","To") + ":</td><td><input  id='tomail' type='text' name='tomail' /></td></tr>";
  4870.     s += "<tr><td>" + L.s("YourName","Your Name") + ":</td><td><input id='yname' type='text' name='yourName'/></td></tr>";
  4871.     s += "<tr><td>" + L.s("YourEmail","Your Email") + ":</td><td><input id='youremail' type='text' name='frommail'/></td></tr>";
  4872.     s += "<tr><td>" + L.s("Message","Message") + ":</td><td><textarea rows='10' cols='30' id='sharemsg' name='message'></textarea></td></tr>";
  4873.     s += "<tr><td></td><td align='right'><input style='width:100px' type='button' onclick='RunTime.onSendEmail();' value='" + L.s("Send","Send") + "'/></td></tr>";
  4874.     s += "</table>";
  4875.     s += "<input style='display:none' type='hide' id='subject' name='subject' value='" + L.s("YourFriend","YourFirend") + L.s("ShareEmailTitle","ShareEmailTitle") + "'/>";
  4876.     s += "</form>";
  4877.     return s;
  4878. }
  4879. core.HtmlHelper.toThumbsHtml = function(pages) {
  4880.     var s = "";
  4881.     var _g1 = 0, _g = pages.length;
  4882.     while(_g1 < _g) {
  4883.         var i = _g1++;
  4884.         var page = pages[i];
  4885.         s += core.HtmlHelper.toThumbsNodeHtml(page);
  4886.     }
  4887.     return s;
  4888. }
  4889. core.HtmlHelper.toThumbsNodeHtml = function(page) {
  4890.     return "<img class=\"thumb\" src=\"" + page.urlThumb + "\" onclick=\"gotoPage(" + page.num + "); \" />";
  4891. }
  4892. core.HtmlHelper.toBookmarksHtml = function(bookmarks,singleMode,lbEnable,rbEnable) {
  4893.     var s = "";
  4894.     s += "<div id=\"op\">";
  4895.     s += "<textarea id=\"bookmarknote\"></textarea>";
  4896.     if(singleMode) s += "<button onclick=\"addBookmark(0)\">Add Bookmark</button>"; else {
  4897.         if(lbEnable) s += "<button onclick=\"addBookmark(-1)\">Add Left Bookmark</button>"; else s += "<button disabled=\"disabled\">Add Left Bookmark</button>";
  4898.         if(rbEnable) s += "<button onclick=\"addBookmark(1)\">Add Right Bookmark</button>"; else s += "<button disabled=\"disabled\">Add Right Bookmark</button>";
  4899.     }
  4900.     s += "<button>Remove All</button>";
  4901.     s += "</div>";
  4902.     s += "<ul style=\"margin:20px 0px 0px 0px;padding-left:5px;padding-right:5px;\">";
  4903.     if(bookmarks != null) {
  4904.         var _g1 = 0, _g = bookmarks.length;
  4905.         while(_g1 < _g) {
  4906.             var i = _g1++;
  4907.             var bookmark = bookmarks[i];
  4908.             s += core.HtmlHelper.toBookmarkNodeHtml(bookmark);
  4909.         }
  4910.     }
  4911.     s += "</ul>";
  4912.     return s;
  4913. }
  4914. core.HtmlHelper.toBookmarkNodeHtml = function(bookmark) {
  4915.     var s = "";
  4916.     s += "<li class=\"bookmarkrow\" >";
  4917.     s += "<p class=\"p1\" onclick=\"gotoPage(" + Std.string(bookmark.pageNum - 1) + ")\" > P" + bookmark.pageNum + "</p>";
  4918.     s += "<p class=\"p2\" onclick=\"gotoPage(" + Std.string(bookmark.pageNum - 1) + ")\">" + bookmark.text + "</p>";
  4919.     if(!bookmark.onlyread) s += "<button onclick=\"removeBookmark(" + Std.string(bookmark.pageNum - 1) + ")\" style=\"float:right;margin:0px -2px;\">" + L.s("RemoveBookmark","Remove") + "</button>";
  4920.     s += "</li>";
  4921.     return s;
  4922. }
  4923. core.HtmlHelper.toSearchHtml = function() {
  4924.     return StringTools.replace(RunTime.searchHtmlCache,"$Search",L.s("Search"));
  4925. }
  4926. core.HtmlHelper.toSearchResultHtml = function(results) {
  4927.     var s = "";
  4928.     s += "<table>";
  4929.     var _g1 = 0, _g = results.length;
  4930.     while(_g1 < _g) {
  4931.         var i = _g1++;
  4932.         var item = results[i];
  4933.         s += "<tr onclick=\"gotoPage(" + Std.string(item.page - 1) + ")\">";
  4934.         s += "<td width=\"40px\" class=\"colPage\">";
  4935.         s += "P" + Std.string(item.page);
  4936.         s += "</td>";
  4937.         s += "<td class=\"colContent\">";
  4938.         s += item.content;
  4939.         s += "</td>";
  4940.         s += "</tr>";
  4941.     }
  4942.     s += "</table>";
  4943.     return s;
  4944. }
  4945. core.HtmlHelper.toVideoHtml = function(video) {
  4946.     return video.toHtml();
  4947. }
  4948. core.HtmlHelper.toRectVideoHtml = function(video,xx,yy,ww,hh) {
  4949.     var loop = video.autoRepeat?"loop":"";
  4950.     var s = "";
  4951.     s += "<div id=\"" + video.id + "\" style=\"position:absolute;z-index:101;left:" + Std.string(Math.round(xx)) + "px;top:" + Std.string(Math.round(yy)) + "px;width:" + Std.string(Math.round(ww)) + "px;height:" + Std.string(Math.round(hh)) + "px;\">";
  4952.     s += "<video class=\"video-js\" src=\"" + video.url + "\" width=\"" + Std.string(Math.round(ww)) + "\" height=\"" + Std.string(Math.round(hh)) + "\" controls autoplay preload onloadeddata='RunTime.logVideoView(\"" + video.url + "\", \"" + video.youtubeId + "\")' " + loop + " >";
  4953.     s += "</video>";
  4954.     s += "</div>";
  4955.     return s;
  4956. }
  4957. core.HtmlHelper.toRectYoutubeVideoHtml = function(video,xx,yy,ww,hh) {
  4958.     var s = "";
  4959.     s += "<div id=\"" + video.id + "\" style=\"position:absolute;z-index:101;left:" + Std.string(Math.round(xx)) + "px;top:" + Std.string(Math.round(yy)) + "px;width:1px;height:1px;\">";
  4960.     s += "<iframe frameborder=\"0\" type=\"text/html\"" + "\" width=\"" + Std.string(Math.round(ww)) + "\" height=\"" + Std.string(Math.round(hh)) + "\"" + " src=\"http://www.youtube.com/embed/" + video.youtubeId + "?controls=1&antoplay=1&enablejsapi=1\">";
  4961.     s += "</iframe>";
  4962.     s += "</div>";
  4963.     return s;
  4964. }
  4965. core.HtmlHelper.toSlideshow = function(slideshow) {
  4966.     return slideshow.toHtml();
  4967. }
  4968. core.HtmlHelper.toSlideshowPopupHtml = function(item) {
  4969.     var w = item.getScaleWidth() + 25;
  4970.     var h = item.getScaleHeight() + 25;
  4971.     if(item.popupWidth != null && item.popupHeight != null) {
  4972.         w = item.popupWidth;
  4973.         h = item.popupHeight;
  4974.     }
  4975.     if(RunTime.clientWidth < 480) {
  4976.         w = w * (RunTime.clientWidth / item.popupWidth) * 0.8 | 0;
  4977.         h = h * (RunTime.clientHeight / item.popupHeight) * 0.8 | 0;
  4978.     }
  4979.     var left = (RunTime.clientWidth - w) / 2 | 0;
  4980.     var top = (RunTime.clientHeight - h) / 2 | 0;
  4981.     var window_color = "#333333";
  4982.     var s = "";
  4983.     s += "<div id=\"popupSlideshow\" style=\"position:absolute; z-index:204; left:" + Std.string(left) + "px; top:" + Std.string(top) + "px; width:" + Std.string(w) + "px; height:" + Std.string(h) + "px;  background-color:#7f7f7f; color:#fff; text-align:left;-moz-transform: scale(0.2);-moz-transition:width  0s ease-out; -webkit-transform: scale(0.2); -webkit-transition: 0s ease-out; \">";
  4984.     s += "<div style=\"height:" + Std.string(h - 24) + "px; overflow:hidden; line-height:120%; text-align:center; background-color:" + window_color + "; margin:6px; padding:6px;\">";
  4985.     s += item.htmlContent;
  4986.     s += "</div>";
  4987.     s += "<img width=\"24\" height=\"24\" src=\"content/images/close.png\" onclick=\"clearPopupContents();RunTime.clearSlideshowContents();\" style=\"position:absolute;right:-12px;top:-12px;\" />";
  4988.     s += "</div>";
  4989.     return s;
  4990. }
  4991. core.HtmlHelper.toSlideShowHtml = function(slideshow,xx,yy,ww,hh,scale) {
  4992.     var offY = 45;
  4993.     var s = "";
  4994.     if(slideshow.showAsButton == true) {
  4995.         if(slideshow.transition == "move") {
  4996.             slideshow.htmlContent += "<div >";
  4997.             slideshow.htmlContent += "<div  style=\"width: 100%;overflow: hidden;\">";
  4998.             slideshow.htmlContent += "<div class=\"inner\" id=\"p_" + slideshow.id + "\" style=\"width:" + slideshow.slides.length * 100 + "%;\">";
  4999.             var _g1 = 0, _g = slideshow.slides.length;
  5000.             while(_g1 < _g) {
  5001.                 var i = _g1++;
  5002.                 slideshow.htmlContent += "<article style=\"width:" + 1 / slideshow.slides.length * 100 + "%;\">";
  5003.                 slideshow.htmlContent += "<img src=\"" + slideshow.slides[i].url + "\" onclick=\"RunTime.navigateUrl('" + slideshow.slides[i].href + "');\">";
  5004.                 slideshow.htmlContent += "</article>";
  5005.             }
  5006.             slideshow.htmlContent += "</div>";
  5007.             slideshow.htmlContent += "</div>";
  5008.             slideshow.htmlContent += "</div>";
  5009.         } else if(slideshow.transition == "fade") {
  5010.             slideshow.htmlContent += "<div >";
  5011.             slideshow.htmlContent += "<div class=\"inner\" id=\"p_" + slideshow.id + "\" >";
  5012.             var _g1 = 0, _g = slideshow.slides.length;
  5013.             while(_g1 < _g) {
  5014.                 var i = _g1++;
  5015.                 var sid = slideshow.id + "_" + (slideshow.slides.length - i);
  5016.                 slideshow.htmlContent += "<article style=\"text-align:left;width:100%;overflow: hidden;background:" + slideshow.bgColor + ";position:absolute;\"" + " id=\"a_" + sid + "\">";
  5017.                 slideshow.htmlContent += "<img id=\"" + sid + "\" src=\"" + slideshow.slides[slideshow.slides.length - i - 1].url + "\"" + " onclick=\"RunTime.navigateUrl('" + slideshow.slides[slideshow.slides.length - i - 1].href + "');\" " + " style=\"" + "\"" + " onload=\"RunTime.resizeSlide(this," + (ww | 0) + "," + (hh | 0) + ",'" + sid + "'," + scale + ");\"" + ">";
  5018.                 slideshow.htmlContent += "</article>";
  5019.             }
  5020.             slideshow.htmlContent += "</div>";
  5021.             slideshow.htmlContent += "</div>";
  5022.         }
  5023.         RunTime.slideshowPopupHtml = "";
  5024.         RunTime.slideshowPopupHtml = core.HtmlHelper.toSlideshowPopupHtml(slideshow);
  5025.         s += "<div id=\"" + "slideshowButtonImg" + "\" style=\"position:absolute;z-index:99;left:" + Std.string(Math.round(xx)) + "px;top:" + Std.string(Math.round(yy)) + "px;width:" + Std.string(Math.round(ww)) + "px;height:" + Std.string(Math.round(hh)) + "px;\">";
  5026.         var sid = "buttonImg_" + slideshow.id + "_" + 1;
  5027.         s += "<img id=\"" + sid + "\" src=\"" + slideshow.slides[0].url + "\"" + " onclick=\"RunTime.showAsButtonClick();\" " + " style=\"" + "cursor:pointer;" + "\"" + " onload=\"RunTime.resizeSlide(this," + (ww | 0) + "," + (hh | 0) + ",'" + sid + "'," + scale + ");\"" + ">";
  5028.         s += "</div>";
  5029.     } else {
  5030.         var offY1 = 45;
  5031.         if(slideshow.transition == "move") {
  5032.             s += "<div class=\"" + "slides" + "\" style=\"position:absolute;z-index:108;left:" + Std.string(Math.round(xx)) + "px;top:" + Std.string(Math.round(yy) - offY1) + "px;width:" + Std.string(Math.round(ww)) + "px;height:" + Std.string(Math.round(hh)) + "px;\">";
  5033.             s += "<div  style=\"width: 100%;overflow: hidden;\">";
  5034.             s += "<div class=\"inner\" id=\"p_" + slideshow.id + "\" style=\"width:" + slideshow.slides.length * 100 + "%;\">";
  5035.             var _g1 = 0, _g = slideshow.slides.length;
  5036.             while(_g1 < _g) {
  5037.                 var i = _g1++;
  5038.                 s += "<article style=\"width:" + 1 / slideshow.slides.length * 100 + "%;\">";
  5039.                 s += "<img src=\"" + slideshow.slides[i].url + "\" onclick=\"RunTime.navigateUrl('" + slideshow.slides[i].href + "');\">";
  5040.                 s += "</article>";
  5041.             }
  5042.             s += "</div>";
  5043.             s += "</div>";
  5044.             s += "</div>";
  5045.         } else if(slideshow.transition == "fade") {
  5046.             s += "<div class=\"" + "slides" + "\" style=\"position:absolute;z-index:108;left:" + Std.string(Math.round(xx)) + "px;top:" + Std.string(Math.round(yy) - offY1) + "px;width:" + Std.string(Math.round(ww)) + "px;height:" + Std.string(Math.round(hh)) + "px;\">";
  5047.             s += "<div class=\"inner\" id=\"p_" + slideshow.id + "\" >";
  5048.             var _g1 = 0, _g = slideshow.slides.length;
  5049.             while(_g1 < _g) {
  5050.                 var i = _g1++;
  5051.                 var sid = slideshow.id + "_" + (slideshow.slides.length - i);
  5052.                 s += "<article style=\"text-align:left;width:100%;overflow: hidden;background:" + slideshow.bgColor + ";position:absolute;\"" + " id=\"a_" + sid + "\">";
  5053.                 s += "<img id=\"" + sid + "\" src=\"" + slideshow.slides[slideshow.slides.length - i - 1].url + "\"" + " onclick=\"RunTime.navigateUrl('" + slideshow.slides[slideshow.slides.length - i - 1].href + "');\" " + " style=\"" + "\"" + " onload=\"RunTime.resizeSlide(this," + (ww | 0) + "," + (hh | 0) + ",'" + sid + "'," + scale + ");\"" + ">";
  5054.                 s += "</article>";
  5055.             }
  5056.             s += "</div>";
  5057.             s += "</div>";
  5058.         }
  5059.     }
  5060.     return s;
  5061. }
  5062. core.HtmlHelper.toPopupImageHtml = function(item,success) {
  5063.     var w = RunTime.clientWidth * 0.9 | 0;
  5064.     var h = RunTime.clientHeight * 0.9 | 0;
  5065.     if(item.popupWidth != null && item.popupHeight != null) {
  5066.         w = item.popupWidth;
  5067.         h = item.popupHeight;
  5068.     } else {
  5069.         var img = null;
  5070.         var onload = function() {
  5071.             item.popupWidth = img.image.width;
  5072.             item.popupHeight = img.image.height;
  5073.             core.HtmlHelper.toPopupImageHtml(item,success);
  5074.         };
  5075.         img = new core.Html5Image(item.destination,onload);
  5076.         return;
  5077.     }
  5078.     var helper = new orc.utils.ImageMetricHelper(w,h);
  5079.     var scale = helper.getMaxFitScale(RunTime.clientWidth * 0.9,RunTime.clientHeight * 0.9);
  5080.     h = h * scale | 0;
  5081.     w = w * scale | 0;
  5082.     var left = (RunTime.clientWidth - w) / 2 | 0;
  5083.     var top = (RunTime.clientHeight - h) / 2 | 0;
  5084.     var s = "";
  5085.     if(item.popupWidth != null && item.popupHeight != null) {
  5086.         s = "";
  5087.         s += "<div id=\"popupImage\" style=\"position:absolute; z-index:200;left:" + Std.string(left) + "px; top:" + Std.string(top) + "px; width:" + Std.string(w) + "px; height:" + Std.string(h) + "px; background-color:#ffffff; -webkit-transform: scale(0.2); -webkit-transition: 0s ease-out; \" >";
  5088.         s += "<img src=\"" + Std.string(item.destination) + "\" style=\"width:" + Std.string(w) + "px;height:" + Std.string(h) + "px;\" />";
  5089.         s += "<img width=\"24\" height=\"24\" src=\"content/images/close.png\" onclick=\"clearPopupContents();\" style=\"position:absolute;right:-12px;top:-12px;\" />";
  5090.         s += "</div>";
  5091.     } else {
  5092.         s = "";
  5093.         s += "<div style=\"position:absolute;z-index:200; left:" + Std.string(left) + "px; top:" + Std.string(top) + "px; width:" + Std.string(w) + "px; height:" + Std.string(h) + "px; \">";
  5094.         s += "<div style=\"margin:0 auto; \">";
  5095.         s += "<img src=\"" + Std.string(item.destination) + "\" style=\"max-width:" + Std.string(w) + "px;max-height:" + Std.string(h) + "px;\" />";
  5096.         s += "<img width=\"24\" height=\"24\" src=\"content/images/close.png\" onclick=\"clearPopupContents();\" style=\"position:absolute;right:-12px;top:-12px;\" />";
  5097.         s += "</div>";
  5098.         s += "</div>";
  5099.     }
  5100.     if(success != null) success(s);
  5101. }
  5102. core.HtmlHelper.toPopupVideoHtml = function(item) {
  5103.     var w = 600;
  5104.     var h = 480;
  5105.     if(item.popupWidth != null && item.popupHeight != null) {
  5106.         w = item.popupWidth;
  5107.         h = item.popupHeight;
  5108.     }
  5109.     if(RunTime.clientWidth < 480) {
  5110.         w = w * (RunTime.clientWidth / item.popupWidth) * 0.8 | 0;
  5111.         h = h * (RunTime.clientHeight / item.popupHeight) * 0.8 | 0;
  5112.     }
  5113.     var left = (RunTime.clientWidth - w) / 2 | 0;
  5114.     var top = (RunTime.clientHeight - h) / 2 | 0;
  5115.     var s = "";
  5116.     s += "<div id=\"popupVideo\"style=\"position:absolute; z-index:201;left:" + Std.string(left) + "px; top:" + Std.string(top) + "px; width:" + Std.string(w) + "px; height:" + Std.string(h) + "px; background-color:#ffffff; -webkit-transform: scale(0.2); -webkit-transition: 0s ease-out; \">";
  5117.     if(item.youtubeId == null || item.youtubeId == "") {
  5118.         s += "<video class=\"video-js\" src=\"" + Std.string(item.destination) + "\" width=\"" + Std.string(Math.round(w)) + "\" height=\"" + Std.string(Math.round(h)) + "\" controls autoplay preload onloadstart='this.play()' >";
  5119.         s += "</video>";
  5120.     } else {
  5121.         s += "<div style=\"position:absolute;padding-left:0px;padding-top:0px;\">";
  5122.         s += "<iframe frameborder=\"0\" type=\"text/html\"" + "\" width=\"" + Std.string(Math.round(w)) + "\" height=\"" + Std.string(Math.round(h)) + "\"" + " src=\"http://www.youtube.com/embed/" + Std.string(item.youtubeId) + "?controls=1&antoplay=1&enablejsapi=1\">";
  5123.         s += "</iframe>";
  5124.         s += "</div>";
  5125.     }
  5126.     s += "<img width=\"24\" height=\"24\" src=\"content/images/close.png\" onclick=\"clearPopupContents();\" style=\"position:absolute;right:-12px;top:-12px;\" />";
  5127.     s += "</div>";
  5128.     return s;
  5129. }
  5130. core.HtmlHelper.toPopupPageAudiosHtml = function(audio,isLeft) {
  5131.     if(isLeft == null) isLeft = true;
  5132.     var w = 200;
  5133.     var h = 40;
  5134.     var left = 20;
  5135.     var top = 20;
  5136.     var s = "";
  5137.     if(audio == null) return s;
  5138.     if(isLeft == true) {
  5139.         s += "<div style=\"position:absolute; z-index:202;left:" + Std.string(left) + "px; top:" + Std.string(top) + "px; width:" + Std.string(w) + "px; height:" + Std.string(h) + "px; \">";
  5140.         s += "<audio class=\"video-js\" src=\"" + audio.url + "\" width=\"" + Std.string(Math.round(w)) + "\" height=\"" + Std.string(Math.round(h)) + "\" controls autoplay >";
  5141.         s += "</audio>";
  5142.         s += "<img width=\"24\" height=\"24\" src=\"content/images/close.png\" onclick=\"clearLeftBgAudio();\" style=\"position:absolute;right:-12px;top:-12px;\" />";
  5143.         s += "</div>";
  5144.     } else {
  5145.         s += "<div style=\"position:absolute; z-index:202;left:" + Std.string(RunTime.clientWidth / 2 + left | 0) + "px; top:" + Std.string(top) + "px; width:" + Std.string(w) + "px; height:" + Std.string(h) + "px; \">";
  5146.         s += "<audio class=\"video-js\" src=\"" + audio.url + "\" width=\"" + Std.string(Math.round(w)) + "\" height=\"" + Std.string(Math.round(h)) + "\" controls autoplay >";
  5147.         s += "</audio>";
  5148.         s += "<img width=\"24\" height=\"24\" src=\"content/images/close.png\" onclick=\"clearRightBgAudio();\" style=\"position:absolute;right:-12px;top:-12px;\" />";
  5149.         s += "</div>";
  5150.     }
  5151.     return s;
  5152. }
  5153. core.HtmlHelper.toPopupAudioHtml = function(item) {
  5154.     var w = 200;
  5155.     var h = 40;
  5156.     var left = 20;
  5157.     var top = 20;
  5158.     var s = "";
  5159.     s += "<div style=\"position:absolute; z-index:203;left:" + Std.string(left) + "px; top:" + Std.string(top) + "px; width:" + Std.string(w) + "px; height:" + Std.string(h) + "px; \">";
  5160.     s += "<audio class=\"video-js\" src=\"" + Std.string(item.destination) + "\" width=\"" + Std.string(Math.round(w)) + "\" height=\"" + Std.string(Math.round(h)) + "\" controls autoplay >";
  5161.     s += "</audio>";
  5162.     s += "<img width=\"24\" height=\"24\" src=\"content/images/close.png\" onclick=\"clearAudio();\" style=\"position:absolute;right:-12px;top:-12px;\" />";
  5163.     s += "</div>";
  5164.     return s;
  5165. }
  5166. core.HtmlHelper.toPopupHtml = function(item) {
  5167.     var w = 600;
  5168.     var h = 480;
  5169.     if(item.popupWidth != null && item.popupHeight != null) {
  5170.         w = item.popupWidth;
  5171.         h = item.popupHeight;
  5172.     }
  5173.     if(RunTime.clientWidth < 480) {
  5174.         w = w * (RunTime.clientWidth / item.popupWidth) * 0.8 | 0;
  5175.         h = h * (RunTime.clientHeight / item.popupHeight) * 0.8 | 0;
  5176.     }
  5177.     var left = (RunTime.clientWidth - w) / 2 | 0;
  5178.     var top = (RunTime.clientHeight - h) / 2 | 0;
  5179.     var window_color = "#333333";
  5180.     if(item.window_color != null) window_color = item.window_color;
  5181.     if(item.htmlText != null) {
  5182.         if(item.htmlText.indexOf("iframe") != -1) {
  5183.             if(js.Lib.window.navigator.userAgent.indexOf("iPhone") != -1) window_color = "#ffffff";
  5184.         }
  5185.     }
  5186.     var s = "";
  5187.     s += "<div id=\"popupMessage\" style=\"position:absolute; z-index:204; left:" + Std.string(left) + "px; top:" + Std.string(top) + "px; width:" + Std.string(w) + "px; height:";
  5188.     if(js.Lib.window.navigator.userAgent.indexOf("Firefox") != -1) s += Std.string(h) + "px; background-color:#7f7f7f; color:#fff; text-align:left; \">"; else s += Std.string(h) + "px; background-color:#7f7f7f; color:#fff; text-align:left;-moz-transform: scale(0.2);-moz-transition:width  0s ease-out; -webkit-transform: scale(0.2); -webkit-transition: 0s ease-out; \">";
  5189.     var isIframe = false;
  5190.     if(item.htmlText != null) {
  5191.         if(item.htmlText.indexOf("iframe") != -1) isIframe = true;
  5192.     }
  5193.     s += "<div style=\"height:" + Std.string(h - 24) + "px; line-height:120%; background-color:" + window_color + "; margin:3xp 3px; padding:3px 3px; overflow:auto;\">";
  5194.     if(!isIframe) s += "<pre style=\"white-space:pre-wrap; word-wrap:break-word;\">";
  5195.     s += Std.string(item.htmlText);
  5196.     if(!isIframe) s += "</pre>";
  5197.     s += "</div>";
  5198.     s += "<img width=\"24\" height=\"24\" src=\"content/images/close.png\" onclick=\"clearPopupContents();\" style=\"position:absolute;right:-12px;top:-12px;\" />";
  5199.     s += "</div>";
  5200.     return s;
  5201. }
  5202. core.HtmlHelper.toBookmarkPopupHtml = function(item) {
  5203.     var w = 600;
  5204.     var h = 480;
  5205.     if(RunTime.clientWidth < 480) {
  5206.         w = w * (RunTime.clientWidth / w) * 0.8 | 0;
  5207.         h = h * (RunTime.clientHeight / h) * 0.8 | 0;
  5208.     }
  5209.     var left = (RunTime.clientWidth - w) / 2 | 0;
  5210.     var top = (RunTime.clientHeight - h) / 2 | 0;
  5211.     var s = "";
  5212.     s += "<div style=\"position:absolute; z-index:104; left:" + Std.string(left) + "px; top:" + Std.string(top) + "px; width:" + Std.string(w) + "px; height:" + Std.string(h) + "px; background-color:#ffffff; text-align:left; \">";
  5213.     s += "<img width=\"24\" height=\"24\" src=\"content/images/close.png\" onclick=\"clearPopupContents();\" style=\"position:absolute;right:-12px;top:-12px;\" />";
  5214.     s += "</div>";
  5215.     return s;
  5216. }
  5217. core.HtmlHelper.toHighLightPopupHtml = function(item,szSaveFunName,szDeleteFunName) {
  5218.     var w = 300;
  5219.     var h = 200;
  5220.     if(item.popupWidth != null && item.popupHeight != null) {
  5221.         w = item.popupWidth;
  5222.         h = item.popupHeight;
  5223.     }
  5224.     if(RunTime.clientWidth < 480) {
  5225.         w = w * (RunTime.clientWidth / item.popupWidth) * 0.8 | 0;
  5226.         h = h * (RunTime.clientHeight / item.popupHeight) * 0.8 | 0;
  5227.     }
  5228.     var left = (RunTime.clientWidth - w) / 2 | 0;
  5229.     var top = (RunTime.clientHeight - h) / 2 | 0;
  5230.     var colorString = item.color;
  5231.     if(colorString == "") colorString = "rgba(0,255,0,0.4)";
  5232.     colorString = HxOverrides.substr(colorString,5,null);
  5233.     var results = colorString.split(",");
  5234.     var colorR = StringTools.hex(Std.parseInt(results[0]),2);
  5235.     var colorG = StringTools.hex(Std.parseInt(results[1]),2);
  5236.     var colorB = StringTools.hex(Std.parseInt(results[2]),2);
  5237.     var newColorString = "#" + colorR + colorG + colorB;
  5238.     var s = "";
  5239.     s += "<div style=\"position:absolute; z-index:800; left:" + Std.string(left) + "px; top:" + Std.string(top) + "px; width:" + Std.string(w) + "px; height:" + Std.string(h) + "px;  \">" + "<div style=\"margin:0 0; position:absolute; background-color:black;" + "-webkit-border-radius:10px; border:1px solid #ccc; opacity:0.6;width:300px; height:200px;\">" + "</div>" + "<div style=\"position:absolute;top:10px; left:10px; width:280px;" + "background-color:#ffffff; border:1px solid #ccc;margin:0 0;\">" + "<div style=\"width:280px; height:128px; background:#ffffff; padding-top:22px; \">" + "<div id=\"colorPicker\" style=\"position:absolute; top:0px; left:0px;\"><input type=\"button\" value=\"\" id=\"showColor\" style=\"width:150px; background:" + newColorString + "; border:1px solid #ccc; height:20px;\" onclick=\"showHighlightColor()\" /><input type=\"hidden\" id=\"showVal\" value=\"\"><div id=\"color\" style=\"display:none; position:absolute;top:0px;left:0px; background:#ffffff; z-index:810; \"></div></div>" + "<textarea id=\"textNote\" style=\"width:275px; height:123px; border:0px\">" + Std.string(item.note.text) + "</textarea>" + "</div>" + "<img width=\"24\" height=\"24\" src=\"content/images/close.png\" onclick=\"clearPopupContents();\" style=\"position:absolute;right:-20px;top:-20px;\" />" + "</div>" + "<div style=\"position:absolute;top:182px; left:10px;width:280px; margin:0 0; \">" + "<img onclick=\"" + szSaveFunName + "()\" src=\"content/images/save.png\" style=\"position:absolute;" + "left:5px; top:-16px;  \"/>" + "<img onclick=\"" + szDeleteFunName + "()\" src=\"content/images/garbage.png\" style=\"position:absolute;" + "left:75px; top:-16px;  \"/>" + "</div>" + "</div>";
  5240.     return s;
  5241. }
  5242. core.HtmlHelper.toNotePopupHtml = function(item,szSaveFunName,szDeleteFunName) {
  5243.     var w = 300;
  5244.     var h = 200;
  5245.     if(item.popupWidth != null && item.popupHeight != null) {
  5246.         w = item.popupWidth;
  5247.         h = item.popupHeight;
  5248.     }
  5249.     if(RunTime.clientWidth < 480) {
  5250.         w = w * (RunTime.clientWidth / item.popupWidth) * 0.8 | 0;
  5251.         h = h * (RunTime.clientHeight / item.popupHeight) * 0.8 | 0;
  5252.     }
  5253.     var left = (RunTime.clientWidth - w) / 2 | 0;
  5254.     var top = (RunTime.clientHeight - h) / 2 | 0;
  5255.     var s = "";
  5256.     s += "<div style=\"position:absolute; z-index:800; left:" + Std.string(left) + "px; top:" + Std.string(top) + "px; width:" + Std.string(w) + "px; height:" + Std.string(h) + "px;  \">" + "<div style=\"margin:0 0; position:absolute; background-color:black;" + "-webkit-border-radius:10px; border:1px solid #ccc; opacity:0.6;width:300px; height:200px;\">" + "</div>" + "<div style=\"position:absolute;top:10px; left:10px; width:280px;" + "background-color:#ffffff; border:1px solid #ccc;margin:0 0;\">" + "<div style=\"width:280px; height:150px; background:#ffffff\">" + "<textarea id=\"textNote\" style=\"width:275px; height:145px; border:0px\">" + Std.string(item.note.text) + "</textarea>" + "</div>" + "<img width=\"24\" height=\"24\" src=\"content/images/close.png\" onclick=\"clearPopupContents();\" style=\"position:absolute;right:-20px;top:-20px;\" />" + "</div>" + "<div style=\"position:absolute;top:182px; left:10px;width:280px; margin:0 0; \">" + "<img onclick=\"" + szSaveFunName + "()\" src=\"content/images/save.png\" style=\"position:absolute;" + "left:5px; top:-16px\"/>" + "<img onclick=\"" + szDeleteFunName + "()\" src=\"content/images/garbage.png\" style=\"position:absolute;" + "left:75px; top:-16px\"/>" + "</div>" + "</div>";
  5257.     return s;
  5258. }
  5259. core.HtmlHelper.toInputPwdHtml = function() {
  5260.     var left = (RunTime.clientWidth - 300) / 2;
  5261.     var top = (RunTime.clientHeight - 180) / 2;
  5262.     var pos = "position:absolute;z-index:200; left:" + Std.string(Math.round(left)) + "px; top:" + Std.string(Math.round(top)) + "px;";
  5263.     var s = "";
  5264.     s += "<div id=\"inputBox\" style=\" " + pos + " width:300px; height:120px;background-color:#CCCCCC; \">";
  5265.     s += "<p>" + L.s("NeedPassword") + "</p>";
  5266.     s += "<input id=\"tbKeyword\" type=\"password\" style=\"width:120px; height:20px; \"  onkeypress=\"return onInputKeyPress(event)\" />";
  5267.     s += "<input type=\"button\" style=\"height:20px; \" value=\"" + L.s("Submit") + "\" onclick=\"inputPwd(); \" />";
  5268.     s += "</div>";
  5269.     return s;
  5270. }
  5271. core.HtmlHelper.toInputUnlockPwdHtml = function() {
  5272.     var left = (RunTime.clientWidth - 300) / 2;
  5273.     var top = (RunTime.clientHeight - 180) / 2;
  5274.     var pos = "position:absolute;z-index:200; left:" + Std.string(Math.round(left)) + "px; top:" + Std.string(Math.round(top)) + "px;";
  5275.     var s = "";
  5276.     s += "<div id=\"inputBox\" style=\" " + pos + " width:300px; height:120px;background-color:#CCCCCC; \">";
  5277.     s += "<img width=\"24\" height=\"24\" src=\"content/images/close.png\" onclick=\"clearPopupContents();\" style=\"position:absolute;right:-10px;top:-10px;\" />";
  5278.     s += "<p>" + L.s("NeedPassword") + "</p>";
  5279.     s += "<input id=\"tbKeyword\" type=\"password\" style=\"width:120px; height:20px; \"  onkeypress=\"return onUnlockKeyPress(event)\" />";
  5280.     s += "<input type=\"button\" style=\"height:20px; \" value=\"" + L.s("Submit") + "\" onclick=\"unlockPage(); \" />";
  5281.     s += "</div>";
  5282.     return s;
  5283. }
  5284. core.LangCfg = function() {
  5285.     this.content = null;
  5286.     this.isDefault = false;
  5287. };
  5288. core.LangCfg.__name__ = true;
  5289. core.LangCfg.prototype = {
  5290.     __class__: core.LangCfg
  5291. }
  5292. core.Note = function() {
  5293.     this.image = new Image();
  5294.     this.image.src = "content/images/iconNote.png";
  5295.     this.text = "";
  5296.     this.x = 0;
  5297.     this.y = 0;
  5298.     this.guid = "";
  5299. };
  5300. core.Note.__name__ = true;
  5301. core.Note.prototype = {
  5302.     hitTest: function(x,y) {
  5303.         if(this.image == null) return false;
  5304.         if(x < this.x || y < this.y || x > this.x + this.image.width || y > this.y + this.image.height) return false;
  5305.         return true;
  5306.     }
  5307.     ,loadToContext2D: function(context) {
  5308.         if(this.image != null) context.drawImage(this.image,this.x,this.y);
  5309.     }
  5310.     ,draw: function() {
  5311.         if(this.canvas == null || this.image == null) return;
  5312.         var context = this.getContext();
  5313.         context.drawImage(this.image,this.x,this.y);
  5314.     }
  5315.     ,getContext: function() {
  5316.         return this.canvas.getContext("2d");
  5317.     }
  5318.     ,setCanvas: function(canvas) {
  5319.         this.canvas = canvas;
  5320.     }
  5321.     ,setImage: function(image) {
  5322.         this.image = image;
  5323.     }
  5324.     ,__class__: core.Note
  5325. }
  5326. core.NoteIcon = function() {
  5327.     this.note = new core.Note();
  5328.     this.x = 0;
  5329.     this.y = 0;
  5330.     this.width = 0;
  5331.     this.height = 0;
  5332.     this.pageNum = -1;
  5333.     this.guid = "";
  5334.     this.checked = false;
  5335.     this.pageLayoutType = 0;
  5336.     this.scale = 1;
  5337.     this.offsetX = 0;
  5338.     this.offsetY = 0;
  5339. };
  5340. core.NoteIcon.__name__ = true;
  5341. core.NoteIcon.prototype = {
  5342.     click: function(popupXOffset,popupYOffset) {
  5343.         if(popupYOffset == null) popupYOffset = 0;
  5344.         if(popupXOffset == null) popupXOffset = 0;
  5345.         RunTime.showPopupMaskLayer();
  5346.         RunTime.setOffset(js.Lib.document.getElementById("cvsOthers"),popupXOffset,popupYOffset);
  5347.         js.Lib.document.getElementById("cvsOthers").innerHTML = core.HtmlHelper.toNotePopupHtml(this,"saveNote","deleteNote");
  5348.         js.Lib.document.getElementById("textNote").focus();
  5349.     }
  5350.     ,hitTest: function(mouseX,mouseY) {
  5351.         var dp = this.getDrawParams();
  5352.         var xx = dp.dx + (this.x - dp.sx) * (dp.dw / dp.sw);
  5353.         var yy = dp.dy + (this.y - dp.sy) * (dp.dh / dp.sh);
  5354.         var ww = this.width * (dp.dw / dp.sw);
  5355.         var hh = this.height * (dp.dh / dp.sh);
  5356.         var result = mouseX >= xx && mouseY >= yy && mouseX <= xx + ww && mouseY <= yy + hh;
  5357.         return result;
  5358.     }
  5359.     ,draw: function(context) {
  5360.         var radius = 5;
  5361.         context.save();
  5362.         context.fillStyle = "rgba(255,0,0,0.4)";
  5363.         context.fillRect(this.tx | 0,this.ty | 0,this.twidth | 0,this.theight | 0);
  5364.         context.restore();
  5365.         if(this.note != null) {
  5366.             this.note.x = this.tx;
  5367.             this.note.y = this.ty - this.note.image.height;
  5368.             this.note.draw();
  5369.         }
  5370.     }
  5371.     ,loadToContext2D: function(context) {
  5372.         var radius = 5;
  5373.         context.save();
  5374.         context.fillStyle = "rgba(255,0,0,0.4)";
  5375.         var dp = this.getDrawParams();
  5376.         var xx = dp.dx + (this.x - dp.sx) * (dp.dw / dp.sw);
  5377.         var yy = dp.dy + (this.y - dp.sy) * (dp.dh / dp.sh);
  5378.         var ww = this.width * (dp.dw / dp.sw);
  5379.         var hh = this.height * (dp.dh / dp.sh);
  5380.         context.drawImage(this.note.image,xx | 0,yy | 0,ww | 0,hh | 0);
  5381.         context.restore();
  5382.         if(this.note != null) {
  5383.             this.note.x = this.x;
  5384.             this.note.y = this.y - this.note.image.height;
  5385.             this.note.draw();
  5386.         }
  5387.     }
  5388.     ,remove: function() {
  5389.         localStorage.removeItem(this.guid);
  5390.     }
  5391.     ,updateText: function(text) {
  5392.         this.note.text = text;
  5393.         localStorage.setItem(this.guid,this.toJSONString());
  5394.     }
  5395.     ,setChecked: function(bChecked) {
  5396.         this.checked = bChecked;
  5397.         if(this.checked) {
  5398.         } else {
  5399.         }
  5400.     }
  5401.     ,fillData: function(guid,json) {
  5402.         var objJSON = JSON.parse(json);
  5403.         this.x = Std.parseFloat(objJSON.obj[0].x);
  5404.         this.y = Std.parseFloat(objJSON.obj[0].y);
  5405.         this.width = Std.parseFloat(objJSON.obj[0].width);
  5406.         this.height = Std.parseFloat(objJSON.obj[0].height);
  5407.         this.note.text = objJSON.obj[0].note;
  5408.         this.pageNum = Std.parseInt(objJSON.obj[0].page);
  5409.         this.guid = guid;
  5410.     }
  5411.     ,DataTransform: function() {
  5412.         var dp = this.getDrawParams();
  5413.         this.pageNum = this.tpageNum;
  5414.         if(RunTime.singlePage) {
  5415.         } else if(RunTime.book.rightToLeft) {
  5416.             if(this.tx > RunTime.clientWidth / 2) dp = this.getLeftDrawParams(); else dp = this.getRightDrawParams();
  5417.         } else if(this.tx > RunTime.clientWidth / 2) dp = this.getRightDrawParams(); else dp = this.getLeftDrawParams();
  5418.         this.x = dp.sx + (this.tx - dp.dx) / (dp.dw / dp.sw);
  5419.         this.y = dp.sy + (this.ty - dp.dy) / (dp.dh / dp.sh);
  5420.         this.width = this.twidth / (dp.dw / dp.sw);
  5421.         this.height = this.theight / (dp.dh / dp.sh);
  5422.         haxe.Log.trace("x=" + this.x + ",y=" + this.y + ",width=" + this.width + ",height=" + this.height,{ fileName : "NoteIcon.hx", lineNumber : 193, className : "core.NoteIcon", methodName : "DataTransform"});
  5423.     }
  5424.     ,save: function() {
  5425.         if(this.twidth == 0 || this.theight == 0) return;
  5426.         this.guid = RunTime.kvPrex + "@$ni$@" + new Date().getTime();
  5427.         this.DataTransform();
  5428.         localStorage.setItem(this.guid,this.toJSONString());
  5429.     }
  5430.     ,toJSONString: function() {
  5431.         var json = "{\"obj\":[{\"x\":\"" + this.x + "\",\"y\":\"" + this.y + "\",\"width\":\"" + this.width + "\",\"height\":\"" + this.height + "\",\"page\":\"" + this.pageNum + "\",\"note\":\"" + this.note.text + "\"}]}";
  5432.         return json;
  5433.     }
  5434.     ,getBottom: function() {
  5435.         return this.y + this.height;
  5436.     }
  5437.     ,getTop: function() {
  5438.         return this.y;
  5439.     }
  5440.     ,getRight: function() {
  5441.         return this.x + this.width;
  5442.     }
  5443.     ,getLeft: function() {
  5444.         return this.x;
  5445.     }
  5446.     ,getContext: function() {
  5447.         return this.canvas.getContext("2d");
  5448.     }
  5449.     ,setCanvas: function(canvas) {
  5450.         this.canvas = canvas;
  5451.         if(this.note != null) this.note.setCanvas(this.canvas);
  5452.     }
  5453.     ,clone: function() {
  5454.         this.DataTransform();
  5455.         var hl = new core.NoteIcon();
  5456.         hl.x = this.x;
  5457.         hl.y = this.y;
  5458.         hl.width = this.width;
  5459.         hl.height = this.height;
  5460.         hl.pageNum = this.pageNum;
  5461.         hl.guid = this.guid;
  5462.         hl.note.text = this.note.text;
  5463.         return hl;
  5464.     }
  5465.     ,getRightDrawParams: function() {
  5466.         var dp = RunTime.getDrawParams(1);
  5467.         dp.applyTransform(this.scale,this.offsetX,this.offsetY);
  5468.         return dp;
  5469.     }
  5470.     ,getLeftDrawParams: function() {
  5471.         var dp = RunTime.getDrawParams(-1);
  5472.         dp.applyTransform(this.scale,this.offsetX,this.offsetY);
  5473.         return dp;
  5474.     }
  5475.     ,getDrawParams: function() {
  5476.         var dp = RunTime.getDrawParams(this.pageLayoutType);
  5477.         dp.applyTransform(this.scale,this.offsetX,this.offsetY);
  5478.         return dp;
  5479.     }
  5480.     ,__class__: core.NoteIcon
  5481. }
  5482. core.Page = function() {
  5483.     this.locked = false;
  5484.     this.canZoom = true;
  5485.     this.aniScale = 1;
  5486.     this.visible = true;
  5487.     this.pageOffset = 0;
  5488.     this.scale = 1;
  5489.     this.offsetX = 0;
  5490.     this.offsetY = 0;
  5491.     this.bigMode = false;
  5492.     this.locked = false;
  5493. };
  5494. core.Page.__name__ = true;
  5495. core.Page.prototype = {
  5496.     clipImage: function(ctx,img,sx,sy,sw,sh,dx,dy,dw,dh) {
  5497.         if(img.src == null || img.src == "") {
  5498.             js.Lib.alert("no data");
  5499.             return;
  5500.         }
  5501.         var pw = RunTime.book.pageWidth;
  5502.         var ph = RunTime.book.pageHeight;
  5503.         var rw = img.width;
  5504.         var rh = img.height;
  5505.         var scaleX = rw / pw;
  5506.         var scaleY = rh / ph;
  5507.         sx = sx * scaleX;
  5508.         sy = sy * scaleY;
  5509.         sw = sw * scaleX;
  5510.         sh = sh * scaleY;
  5511.         if(sx < 0) sx = 0;
  5512.         if(sy < 0) sy = 0;
  5513.         if(sx + sw > img.width) sw = img.width - sx;
  5514.         if(sy + sh > img.height) sh = img.height - sy;
  5515.         if(sx >= img.width || sy >= img.height) return;
  5516.         if(sw < 1 || sh < 1) return;
  5517.         ctx.save();
  5518.         ctx.drawImage(img,sx,sy,sw,sh,dx,dy,dw,dh);
  5519.         if(RunTime.bLocked && this.locked) {
  5520.             ctx.fillStyle = "rgb(255,255,255)";
  5521.             ctx.fillRect(dx | 0,dy | 0,dw | 0,dh | 0);
  5522.         }
  5523.         ctx.restore();
  5524.     }
  5525.     ,drawImageCore: function(offset) {
  5526.         var dp = this.drawParams.clone();
  5527.         if(dp == null || dp.dw < 2) return;
  5528.         dp.applyTransform(this.scale,this.offsetX,this.offsetY);
  5529.         if(offset == 0) {
  5530.             this.clipImage(this.ctx,this._imagePage,dp.sx,dp.sy,dp.sw,dp.sh,dp.dx,dp.dy,dp.dw,dp.dh);
  5531.             if(this._imageData == null) {
  5532.             }
  5533.         } else if(offset > 0) this.clipImage(this.ctx,this._imagePage,dp.sx,dp.sy,dp.sw * (1 - offset),dp.sh,dp.dx + dp.dw * offset,dp.dy,dp.dw * (1 - offset),dp.dh); else {
  5534.             offset = -offset;
  5535.             this.clipImage(this.ctx,this._imagePage,dp.sx + offset * dp.sw,dp.sy,dp.sw * (1 - offset),dp.sh,dp.dx,dp.dy,dp.dw * (1 - offset),dp.dh);
  5536.         }
  5537.     }
  5538.     ,draw: function() {
  5539.         if(this.ctx == null) return;
  5540.         if(this.drawParams == null) return;
  5541.         if(this.visible == false) return;
  5542.         var offset = this.pageOffset;
  5543.         if(this.bookContext != null) offset += this.bookContext.pageOffset;
  5544.         if(offset > -1.001 && offset < -1) offset = -1;
  5545.         if(offset > 1 && offset < 1.001) offset = 1;
  5546.         if(offset <= -1 || offset >= 1) return;
  5547.         this.drawImageCore(offset);
  5548.     }
  5549.     ,loadToContext2D: function(ctx) {
  5550.         this.ctx = ctx;
  5551.         if(this._imagePage == null) this.getImagePage();
  5552.         if(this.loaded == null) RunTime.divLoading.style.display = "inline";
  5553.         if(this.loaded == true) {
  5554.             RunTime.divLoading.style.display = "none";
  5555.             this.draw();
  5556.         }
  5557.     }
  5558.     ,onMouseClick: function(e) {
  5559.         if(e.localX > this._imagePage.width * 0.5) {
  5560.             if(this.turnRightCallback != null) this.turnRightCallback();
  5561.         } else if(this.turnLeftCallback != null) this.turnLeftCallback();
  5562.     }
  5563.     ,clearCallback: function() {
  5564.         this.turnLeftCallback = null;
  5565.         this.turnRightCallback = null;
  5566.     }
  5567.     ,zoom: function(scale) {
  5568.         this.aniScale += scale;
  5569.     }
  5570.     ,loadBigImagePage: function() {
  5571.         var img = new Image();
  5572.         img.src = this.getBigPageUrl();
  5573.     }
  5574.     ,getPageUrl: function() {
  5575.         return this.urlPage;
  5576.     }
  5577.     ,getBlankPage: function() {
  5578.         return RunTime.urlRoot + "content/images/bgLock.png";
  5579.     }
  5580.     ,getBigPageUrl: function() {
  5581.         var url = this.urlPage;
  5582.         var seg = url.split("/");
  5583.         if(js.Lib.window.navigator.userAgent.indexOf("iPhone") != -1) return "content/medium/" + seg[seg.length - 1]; else return "content/pages/" + seg[seg.length - 1];
  5584.     }
  5585.     ,setBigImageMode: function() {
  5586.         this.bigMode = true;
  5587.     }
  5588.     ,getImagePage: function() {
  5589.         if(this._imagePage != null) return this._imagePage;
  5590.         var img = new Image();
  5591.         img.src = this.urlPage;
  5592.         RunTime.divLoading.style.display = "inline";
  5593.         img.onload = $bind(this,this.onLoadImage);
  5594.         this._imagePage = img;
  5595.         return this._imagePage;
  5596.     }
  5597.     ,onLoadImage: function() {
  5598.         RunTime.allCurrentImage += 1;
  5599.         haxe.Log.trace(" " + RunTime.allCurrentImage + " :" + RunTime.allLoadImage,{ fileName : "Page.hx", lineNumber : 75, className : "core.Page", methodName : "onLoadImage"});
  5600.         this.loaded = true;
  5601.         this.draw();
  5602.         if(RunTime.flipBook.currentPageNum == null || RunTime.flipBook.currentPageNum == this.num) {
  5603.             if(RunTime.allCurrentImage >= RunTime.allLoadImage) RunTime.divLoading.style.display = "none";
  5604.             RunTime.flipBook.loadCtxHotlinks();
  5605.             RunTime.flipBook.bookContext.render();
  5606.         }
  5607.     }
  5608.     ,__class__: core.Page
  5609. }
  5610. core.PagePair = function(i) {
  5611.     if(i < 0 || i >= RunTime.book.pages.length) return;
  5612.     this.currentPageNum = i;
  5613.     if(i == 0) {
  5614.         this.rightPage = RunTime.book.pages[i];
  5615.         this.rightPage.isDoublePageMode = true;
  5616.         this.rightPage.pageOffset = 0;
  5617.         this.rightPage.drawParams = RunTime.getDrawParams(1);
  5618.         RunTime.flipBook.zoomRightPage.width = this.rightPage.drawParams.dw | 0;
  5619.         RunTime.flipBook.zoomRightPage.height = this.rightPage.drawParams.dh | 0;
  5620.         RunTime.flipBook.zoomRightPage.style.left = Std.string(this.rightPage.drawParams.dx) + "px";
  5621.         RunTime.flipBook.zoomRightPage.style.top = Std.string(this.rightPage.drawParams.dy) + "px";
  5622.         RunTime.flipBook.rightPageLock.style.width = (this.rightPage.drawParams.dw | 0) + "px";
  5623.         RunTime.flipBook.rightPageLock.style.height = (this.rightPage.drawParams.dh | 0) + "px";
  5624.         RunTime.flipBook.rightPageLock.style.left = Std.string(this.rightPage.drawParams.dx) + "px";
  5625.         RunTime.flipBook.rightPageLock.style.top = Std.string(this.rightPage.drawParams.dy) + "px";
  5626.     } else if(i == RunTime.book.pages.length - 1 && i % 2 == 1) {
  5627.         this.leftPage = RunTime.book.pages[i];
  5628.         this.leftPage.isDoublePageMode = true;
  5629.         this.leftPage.pageOffset = 0;
  5630.         this.leftPage.drawParams = RunTime.getDrawParams(-1);
  5631.         RunTime.flipBook.zoomLeftPage.width = this.leftPage.drawParams.dw | 0;
  5632.         RunTime.flipBook.zoomLeftPage.height = this.leftPage.drawParams.dh | 0;
  5633.         RunTime.flipBook.zoomLeftPage.style.left = Std.string(this.leftPage.drawParams.dx) + "px";
  5634.         RunTime.flipBook.zoomLeftPage.style.top = Std.string(this.leftPage.drawParams.dy) + "px";
  5635.         RunTime.flipBook.leftPageLock.style.width = (this.leftPage.drawParams.dw | 0) + "px";
  5636.         RunTime.flipBook.leftPageLock.style.height = (this.leftPage.drawParams.dh | 0) + "px";
  5637.         RunTime.flipBook.leftPageLock.style.left = Std.string(this.leftPage.drawParams.dx) + "px";
  5638.         RunTime.flipBook.leftPageLock.style.top = Std.string(this.leftPage.drawParams.dy) + "px";
  5639.     } else {
  5640.         var right = i + 1 - (i + 1) % 2;
  5641.         var left = right - 1;
  5642.         this.leftPage = RunTime.book.pages[left];
  5643.         this.rightPage = RunTime.book.pages[right];
  5644.         this.leftPage.isDoublePageMode = true;
  5645.         this.rightPage.isDoublePageMode = true;
  5646.         this.leftPage.pageOffset = 0;
  5647.         this.rightPage.pageOffset = 0;
  5648.         this.leftPage.drawParams = RunTime.getDrawParams(-1);
  5649.         this.rightPage.drawParams = RunTime.getDrawParams(1);
  5650.         RunTime.flipBook.zoomRightPage.width = this.rightPage.drawParams.dw | 0;
  5651.         RunTime.flipBook.zoomRightPage.height = this.rightPage.drawParams.dh | 0;
  5652.         RunTime.flipBook.zoomRightPage.style.left = Std.string(this.rightPage.drawParams.dx) + "px";
  5653.         RunTime.flipBook.zoomRightPage.style.top = Std.string(this.rightPage.drawParams.dy) + "px";
  5654.         RunTime.flipBook.zoomLeftPage.width = this.leftPage.drawParams.dw | 0;
  5655.         RunTime.flipBook.zoomLeftPage.height = this.leftPage.drawParams.dh | 0;
  5656.         RunTime.flipBook.zoomLeftPage.style.left = Std.string(this.leftPage.drawParams.dx) + "px";
  5657.         RunTime.flipBook.zoomLeftPage.style.top = Std.string(this.leftPage.drawParams.dy) + "px";
  5658.         RunTime.flipBook.rightPageLock.style.width = (this.rightPage.drawParams.dw | 0) + "px";
  5659.         RunTime.flipBook.rightPageLock.style.height = (this.rightPage.drawParams.dh | 0) + "px";
  5660.         RunTime.flipBook.rightPageLock.style.left = Std.string(this.rightPage.drawParams.dx) + "px";
  5661.         RunTime.flipBook.rightPageLock.style.top = Std.string(this.rightPage.drawParams.dy) + "px";
  5662.         RunTime.flipBook.leftPageLock.style.width = (this.leftPage.drawParams.dw | 0) + "px";
  5663.         RunTime.flipBook.leftPageLock.style.height = (this.leftPage.drawParams.dh | 0) + "px";
  5664.         RunTime.flipBook.leftPageLock.style.left = Std.string(this.leftPage.drawParams.dx) + "px";
  5665.         RunTime.flipBook.leftPageLock.style.top = Std.string(this.leftPage.drawParams.dy) + "px";
  5666.     }
  5667. };
  5668. core.PagePair.__name__ = true;
  5669. core.PagePair.prototype = {
  5670.     getNumInDoubleMode: function() {
  5671.         if(this.leftPage != null) return this.leftPage.numInDoubleMode; else if(this.rightPage != null) return this.rightPage.numInDoubleMode; else return -1;
  5672.     }
  5673.     ,match: function(pageNum) {
  5674.         if(this.leftPage != null) {
  5675.             if(this.leftPage.num == pageNum) return -1;
  5676.         }
  5677.         if(this.rightPage != null) {
  5678.             if(this.rightPage.num == pageNum) return 1;
  5679.         }
  5680.         return 0;
  5681.     }
  5682.     ,__class__: core.PagePair
  5683. }
  5684. core.SearchResult = function(content,page) {
  5685.     this.content = content;
  5686.     this.page = page;
  5687. };
  5688. core.SearchResult.__name__ = true;
  5689. core.SearchResult.prototype = {
  5690.     __class__: core.SearchResult
  5691. }
  5692. core.Slide = function() {
  5693. };
  5694. core.Slide.__name__ = true;
  5695. core.Slide.prototype = {
  5696.     __class__: core.Slide
  5697. }
  5698. core.SlideshowInfo = function() {
  5699.     this.bgColor = "";
  5700.     this.htmlContent = "";
  5701.     this.slides = new Array();
  5702.     this.tweener = new core.Tweener();
  5703.     this.idx = 1;
  5704.     this.transition = "fade";
  5705.     this.countOfClip = 0;
  5706. };
  5707. core.SlideshowInfo.__name__ = true;
  5708. core.SlideshowInfo.prototype = {
  5709.     updateLayout: function(dom) {
  5710.         if(dom == null) return;
  5711.         var dp = this.getDrawParams();
  5712.         var xx = dp.dx + (this.x - dp.sx) * (dp.dw / dp.sw);
  5713.         var yy = dp.dy + (this.y - dp.sy) * (dp.dh / dp.sh);
  5714.         var ww = this.width * (dp.dw / dp.sw);
  5715.         var hh = this.height * (dp.dh / dp.sh);
  5716.         dom.style.left = Std.string(Math.round(xx)) + "px";
  5717.         dom.style.top = Std.string(Math.round(yy)) + "px";
  5718.         var videoDom = dom.firstChild;
  5719.         videoDom.width = Std.string(Math.round(ww));
  5720.         videoDom.height = Std.string(Math.round(hh));
  5721.     }
  5722.     ,getScaleHeight: function() {
  5723.         var dp = this.getDrawParams();
  5724.         var hh = this.height * (dp.dh / dp.sh);
  5725.         if(Std.string(this.pagewidth) != "NaN") {
  5726.             if(this.pagewidth != dp.sw) hh = dp.sh * (dp.dh / dp.sh);
  5727.         }
  5728.         if(hh >= RunTime.clientHeight) hh = RunTime.clientHeight - 60;
  5729.         return hh;
  5730.     }
  5731.     ,getScaleWidth: function() {
  5732.         var dp = this.getDrawParams();
  5733.         var ww = this.width * (dp.dw / dp.sw);
  5734.         if(Std.string(this.pagewidth) != "NaN") {
  5735.             if(this.pagewidth != dp.sw) ww = dp.sw * (dp.dw / dp.sw);
  5736.         }
  5737.         if(ww >= RunTime.clientWidth) ww = RunTime.clientWidth - 60;
  5738.         return ww;
  5739.     }
  5740.     ,toHtml: function() {
  5741.         var dp = this.getDrawParams();
  5742.         var xx = dp.dx + (this.x - dp.sx) * (dp.dw / dp.sw);
  5743.         var yy = dp.dy + (this.y - dp.sy) * (dp.dh / dp.sh);
  5744.         var ww = this.width * (dp.dw / dp.sw);
  5745.         var hh = this.height * (dp.dh / dp.sh);
  5746.         if(Std.string(this.pagewidth) != "NaN") {
  5747.             if(this.pagewidth != dp.sw) {
  5748.                 ww = dp.sw * (dp.dw / dp.sw);
  5749.                 hh = dp.sh * (dp.dh / dp.sh);
  5750.             }
  5751.         }
  5752.         return core.HtmlHelper.toSlideShowHtml(this,xx,yy,ww,hh,dp.dw / dp.sw);
  5753.     }
  5754.     ,getDrawParams: function() {
  5755.         var dp = RunTime.getDrawParams(this.pageLayoutType);
  5756.         var ctx = RunTime.flipBook.bookContext;
  5757.         dp.applyTransform(ctx.scale,ctx.offsetX,ctx.offsetY);
  5758.         return dp;
  5759.     }
  5760.     ,onSlideChange: function(count) {
  5761.         if(count % this.countOfClip != 0) return;
  5762.         if(this.transition == "move") {
  5763.             var p = js.Lib.document.getElementById("p_" + this.id);
  5764.             if(p != null) {
  5765.                 var pidx = -this.idx * 100;
  5766.                 p.style.marginLeft = Std.string(pidx) + "%";
  5767.             }
  5768.             this.idx++;
  5769.             if(this.idx >= this.slides.length) this.idx = 0;
  5770.         } else {
  5771.             var a = js.Lib.document.getElementById("a_" + this.id + "_" + Std.string(this.idx));
  5772.             this.idx++;
  5773.             if(this.idx == this.slides.length + 1) {
  5774.                 var _g1 = 0, _g = this.slides.length;
  5775.                 while(_g1 < _g) {
  5776.                     var i = _g1++;
  5777.                     var t = i + 1;
  5778.                     var p = js.Lib.document.getElementById("a_" + this.id + "_" + Std.string(t));
  5779.                     if(p != null) p.style.cssText = "text-align:left;width:100%;overflow: hidden;opacity:1;position:absolute;background:" + this.bgColor;
  5780.                 }
  5781.             }
  5782.             if(a != null && this.idx < this.slides.length + 1) a.style.cssText = "text-align:left;opacity: 0 ; -webkit-transition: 0.5s ease-out;width:100%;overflow: hidden;";
  5783.             if(this.idx > this.slides.length) this.idx = 1;
  5784.         }
  5785.     }
  5786.     ,stopTweener: function() {
  5787.         this.tweener.stop();
  5788.     }
  5789.     ,startTweener: function() {
  5790.         this.countOfClip = 50 * Std.parseInt(this.interval);
  5791.         this.tweener.onChange = $bind(this,this.onSlideChange);
  5792.         this.tweener.start(1000000);
  5793.     }
  5794.     ,__class__: core.SlideshowInfo
  5795. }
  5796. core.Tweener = function() {
  5797.     this.count = 0;
  5798.     this.maxCount = 0;
  5799. };
  5800. core.Tweener.__name__ = true;
  5801. core.Tweener.prototype = {
  5802.     onChangeInvoke: function() {
  5803.         this.count++;
  5804.         if(this.onChange == null) return;
  5805.         if(this.count > this.maxCount) return;
  5806.         this.onChange(this.count);
  5807.         this.run();
  5808.     }
  5809.     ,run: function() {
  5810.         if(this.count >= this.maxCount) return;
  5811.         haxe.Timer.delay($bind(this,this.onChangeInvoke),33);
  5812.     }
  5813.     ,stop: function() {
  5814.         this.maxCount = this.count;
  5815.     }
  5816.     ,start: function(max) {
  5817.         if(max == null) max = 1;
  5818.         this.maxCount = max;
  5819.         this.count = 0;
  5820.         this.run();
  5821.     }
  5822.     ,__class__: core.Tweener
  5823. }
  5824. core.VideoInfo = function() {
  5825.     this.pageLayoutType = 0;
  5826.     this.youtubeId = "";
  5827.     this.url = "";
  5828.     this.id = "";
  5829. };
  5830. core.VideoInfo.__name__ = true;
  5831. core.VideoInfo.prototype = {
  5832.     updateLayout: function(dom) {
  5833.         if(dom == null) return;
  5834.         var dp = this.getDrawParams();
  5835.         var xx = dp.dx + (this.x - dp.sx) * (dp.dw / dp.sw);
  5836.         var yy = dp.dy + (this.y - dp.sy) * (dp.dh / dp.sh);
  5837.         var ww = this.width * (dp.dw / dp.sw);
  5838.         var hh = this.height * (dp.dh / dp.sh);
  5839.         dom.style.left = Std.string(Math.round(xx)) + "px";
  5840.         dom.style.top = Std.string(Math.round(yy)) + "px";
  5841.         var videoDom = dom.firstChild;
  5842.         videoDom.width = Std.string(Math.round(ww));
  5843.         videoDom.height = Std.string(Math.round(hh));
  5844.     }
  5845.     ,toHtml: function() {
  5846.         var dp = this.getDrawParams();
  5847.         var xx = dp.dx + (this.x - dp.sx) * (dp.dw / dp.sw);
  5848.         var yy = dp.dy + (this.y - dp.sy) * (dp.dh / dp.sh);
  5849.         var ww = this.width * (dp.dw / dp.sw);
  5850.         var hh = this.height * (dp.dh / dp.sh);
  5851.         if(this.youtubeId != null && this.youtubeId != "") return core.HtmlHelper.toRectYoutubeVideoHtml(this,xx,yy,ww,hh); else return core.HtmlHelper.toRectVideoHtml(this,xx,yy,ww,hh);
  5852.     }
  5853.     ,getDrawParams: function() {
  5854.         var dp = RunTime.getDrawParams(this.pageLayoutType);
  5855.         var ctx = RunTime.flipBook.bookContext;
  5856.         dp.applyTransform(ctx.scale,ctx.offsetX,ctx.offsetY);
  5857.         return dp;
  5858.     }
  5859.     ,__class__: core.VideoInfo
  5860. }
  5861. core.ZoomStatus = { __ename__ : true, __constructs__ : ["normal","zooming","zoomed","zoomin","zoomout"] }
  5862. core.ZoomStatus.normal = ["normal",0];
  5863. core.ZoomStatus.normal.toString = $estr;
  5864. core.ZoomStatus.normal.__enum__ = core.ZoomStatus;
  5865. core.ZoomStatus.zooming = ["zooming",1];
  5866. core.ZoomStatus.zooming.toString = $estr;
  5867. core.ZoomStatus.zooming.__enum__ = core.ZoomStatus;
  5868. core.ZoomStatus.zoomed = ["zoomed",2];
  5869. core.ZoomStatus.zoomed.toString = $estr;
  5870. core.ZoomStatus.zoomed.__enum__ = core.ZoomStatus;
  5871. core.ZoomStatus.zoomin = ["zoomin",3];
  5872. core.ZoomStatus.zoomin.toString = $estr;
  5873. core.ZoomStatus.zoomin.__enum__ = core.ZoomStatus;
  5874. core.ZoomStatus.zoomout = ["zoomout",4];
  5875. core.ZoomStatus.zoomout.toString = $estr;
  5876. core.ZoomStatus.zoomout.__enum__ = core.ZoomStatus;
  5877. var haxe = haxe || {}
  5878. haxe.BaseCode = function(base) {
  5879.     var len = base.length;
  5880.     var nbits = 1;
  5881.     while(len > 1 << nbits) nbits++;
  5882.     if(nbits > 8 || len != 1 << nbits) throw "BaseCode : base length must be a power of two.";
  5883.     this.base = base;
  5884.     this.nbits = nbits;
  5885. };
  5886. haxe.BaseCode.__name__ = true;
  5887. haxe.BaseCode.encode = function(s,base) {
  5888.     var b = new haxe.BaseCode(haxe.io.Bytes.ofString(base));
  5889.     return b.encodeString(s);
  5890. }
  5891. haxe.BaseCode.decode = function(s,base) {
  5892.     var b = new haxe.BaseCode(haxe.io.Bytes.ofString(base));
  5893.     return b.decodeString(s);
  5894. }
  5895. haxe.BaseCode.prototype = {
  5896.     decodeString: function(s) {
  5897.         return this.decodeBytes(haxe.io.Bytes.ofString(s)).toString();
  5898.     }
  5899.     ,encodeString: function(s) {
  5900.         return this.encodeBytes(haxe.io.Bytes.ofString(s)).toString();
  5901.     }
  5902.     ,decodeBytes: function(b) {
  5903.         var nbits = this.nbits;
  5904.         var base = this.base;
  5905.         if(this.tbl == null) this.initTable();
  5906.         var tbl = this.tbl;
  5907.         var size = b.length * nbits >> 3;
  5908.         var out = haxe.io.Bytes.alloc(size);
  5909.         var buf = 0;
  5910.         var curbits = 0;
  5911.         var pin = 0;
  5912.         var pout = 0;
  5913.         while(pout < size) {
  5914.             while(curbits < 8) {
  5915.                 curbits += nbits;
  5916.                 buf <<= nbits;
  5917.                 var i = tbl[b.b[pin++]];
  5918.                 if(i == -1) throw "BaseCode : invalid encoded char";
  5919.                 buf |= i;
  5920.             }
  5921.             curbits -= 8;
  5922.             out.b[pout++] = buf >> curbits & 255 & 255;
  5923.         }
  5924.         return out;
  5925.     }
  5926.     ,initTable: function() {
  5927.         var tbl = new Array();
  5928.         var _g = 0;
  5929.         while(_g < 256) {
  5930.             var i = _g++;
  5931.             tbl[i] = -1;
  5932.         }
  5933.         var _g1 = 0, _g = this.base.length;
  5934.         while(_g1 < _g) {
  5935.             var i = _g1++;
  5936.             tbl[this.base.b[i]] = i;
  5937.         }
  5938.         this.tbl = tbl;
  5939.     }
  5940.     ,encodeBytes: function(b) {
  5941.         var nbits = this.nbits;
  5942.         var base = this.base;
  5943.         var size = b.length * 8 / nbits | 0;
  5944.         var out = haxe.io.Bytes.alloc(size + (b.length * 8 % nbits == 0?0:1));
  5945.         var buf = 0;
  5946.         var curbits = 0;
  5947.         var mask = (1 << nbits) - 1;
  5948.         var pin = 0;
  5949.         var pout = 0;
  5950.         while(pout < size) {
  5951.             while(curbits < nbits) {
  5952.                 curbits += 8;
  5953.                 buf <<= 8;
  5954.                 buf |= b.b[pin++];
  5955.             }
  5956.             curbits -= nbits;
  5957.             out.b[pout++] = base.b[buf >> curbits & mask] & 255;
  5958.         }
  5959.         if(curbits > 0) out.b[pout++] = base.b[buf << nbits - curbits & mask] & 255;
  5960.         return out;
  5961.     }
  5962.     ,__class__: haxe.BaseCode
  5963. }
  5964. haxe.Http = function(url) {
  5965.     this.url = url;
  5966.     this.headers = new Hash();
  5967.     this.params = new Hash();
  5968.     this.async = true;
  5969. };
  5970. haxe.Http.__name__ = true;
  5971. haxe.Http.requestUrl = function(url) {
  5972.     var h = new haxe.Http(url);
  5973.     h.async = false;
  5974.     var r = null;
  5975.     h.onData = function(d) {
  5976.         r = d;
  5977.     };
  5978.     h.onError = function(e) {
  5979.         throw e;
  5980.     };
  5981.     h.request(false);
  5982.     return r;
  5983. }
  5984. haxe.Http.prototype = {
  5985.     onStatus: function(status) {
  5986.     }
  5987.     ,onError: function(msg) {
  5988.     }
  5989.     ,onData: function(data) {
  5990.     }
  5991.     ,request: function(post) {
  5992.         var me = this;
  5993.         var r = new js.XMLHttpRequest();
  5994.         var onreadystatechange = function() {
  5995.             if(r.readyState != 4) return;
  5996.             var s = (function($this) {
  5997.                 var $r;
  5998.                 try {
  5999.                     $r = r.status;
  6000.                 } catch( e ) {
  6001.                     $r = null;
  6002.                 }
  6003.                 return $r;
  6004.             }(this));
  6005.             if(s == undefined) s = null;
  6006.             if(s != null) me.onStatus(s);
  6007.             if(s != null && s >= 200 && s < 400) me.onData(r.responseText); else switch(s) {
  6008.             case null: case undefined:
  6009.                 me.onError("Failed to connect or resolve host");
  6010.                 break;
  6011.             case 12029:
  6012.                 me.onError("Failed to connect to host");
  6013.                 break;
  6014.             case 12007:
  6015.                 me.onError("Unknown host");
  6016.                 break;
  6017.             default:
  6018.                 me.onError("Http Error #" + r.status);
  6019.             }
  6020.         };
  6021.         if(this.async) r.onreadystatechange = onreadystatechange;
  6022.         var uri = this.postData;
  6023.         if(uri != null) post = true; else {
  6024.             var $it0 = this.params.keys();
  6025.             while( $it0.hasNext() ) {
  6026.                 var p = $it0.next();
  6027.                 if(uri == null) uri = ""; else uri += "&";
  6028.                 uri += StringTools.urlEncode(p) + "=" + StringTools.urlEncode(this.params.get(p));
  6029.             }
  6030.         }
  6031.         try {
  6032.             if(post) r.open("POST",this.url,this.async); else if(uri != null) {
  6033.                 var question = this.url.split("?").length <= 1;
  6034.                 r.open("GET",this.url + (question?"?":"&") + uri,this.async);
  6035.                 uri = null;
  6036.             } else r.open("GET",this.url,this.async);
  6037.         } catch( e ) {
  6038.             this.onError(e.toString());
  6039.             return;
  6040.         }
  6041.         if(this.headers.get("Content-Type") == null && post && this.postData == null) r.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
  6042.         var $it1 = this.headers.keys();
  6043.         while( $it1.hasNext() ) {
  6044.             var h = $it1.next();
  6045.             r.setRequestHeader(h,this.headers.get(h));
  6046.         }
  6047.         r.send(uri);
  6048.         if(!this.async) onreadystatechange();
  6049.     }
  6050.     ,setPostData: function(data) {
  6051.         this.postData = data;
  6052.     }
  6053.     ,setParameter: function(param,value) {
  6054.         this.params.set(param,value);
  6055.     }
  6056.     ,setHeader: function(header,value) {
  6057.         this.headers.set(header,value);
  6058.     }
  6059.     ,__class__: haxe.Http
  6060. }
  6061. haxe.Log = function() { }
  6062. haxe.Log.__name__ = true;
  6063. haxe.Log.trace = function(v,infos) {
  6064.     js.Boot.__trace(v,infos);
  6065. }
  6066. haxe.Log.clear = function() {
  6067.     js.Boot.__clear_trace();
  6068. }
  6069. haxe.Timer = function(time_ms) {
  6070.     var me = this;
  6071.     this.id = window.setInterval(function() {
  6072.         me.run();
  6073.     },time_ms);
  6074. };
  6075. haxe.Timer.__name__ = true;
  6076. haxe.Timer.delay = function(f,time_ms) {
  6077.     var t = new haxe.Timer(time_ms);
  6078.     t.run = function() {
  6079.         t.stop();
  6080.         f();
  6081.     };
  6082.     return t;
  6083. }
  6084. haxe.Timer.measure = function(f,pos) {
  6085.     var t0 = haxe.Timer.stamp();
  6086.     var r = f();
  6087.     haxe.Log.trace(haxe.Timer.stamp() - t0 + "s",pos);
  6088.     return r;
  6089. }
  6090. haxe.Timer.stamp = function() {
  6091.     return new Date().getTime() / 1000;
  6092. }
  6093. haxe.Timer.prototype = {
  6094.     run: function() {
  6095.     }
  6096.     ,stop: function() {
  6097.         if(this.id == null) return;
  6098.         window.clearInterval(this.id);
  6099.         this.id = null;
  6100.     }
  6101.     ,__class__: haxe.Timer
  6102. }
  6103. if(!haxe.io) haxe.io = {}
  6104. haxe.io.Bytes = function(length,b) {
  6105.     this.length = length;
  6106.     this.b = b;
  6107. };
  6108. haxe.io.Bytes.__name__ = true;
  6109. haxe.io.Bytes.alloc = function(length) {
  6110.     var a = new Array();
  6111.     var _g = 0;
  6112.     while(_g < length) {
  6113.         var i = _g++;
  6114.         a.push(0);
  6115.     }
  6116.     return new haxe.io.Bytes(length,a);
  6117. }
  6118. haxe.io.Bytes.ofString = function(s) {
  6119.     var a = new Array();
  6120.     var _g1 = 0, _g = s.length;
  6121.     while(_g1 < _g) {
  6122.         var i = _g1++;
  6123.         var c = s.charCodeAt(i);
  6124.         if(c <= 127) a.push(c); else if(c <= 2047) {
  6125.             a.push(192 | c >> 6);
  6126.             a.push(128 | c & 63);
  6127.         } else if(c <= 65535) {
  6128.             a.push(224 | c >> 12);
  6129.             a.push(128 | c >> 6 & 63);
  6130.             a.push(128 | c & 63);
  6131.         } else {
  6132.             a.push(240 | c >> 18);
  6133.             a.push(128 | c >> 12 & 63);
  6134.             a.push(128 | c >> 6 & 63);
  6135.             a.push(128 | c & 63);
  6136.         }
  6137.     }
  6138.     return new haxe.io.Bytes(a.length,a);
  6139. }
  6140. haxe.io.Bytes.ofData = function(b) {
  6141.     return new haxe.io.Bytes(b.length,b);
  6142. }
  6143. haxe.io.Bytes.prototype = {
  6144.     getData: function() {
  6145.         return this.b;
  6146.     }
  6147.     ,toHex: function() {
  6148.         var s = new StringBuf();
  6149.         var chars = [];
  6150.         var str = "0123456789abcdef";
  6151.         var _g1 = 0, _g = str.length;
  6152.         while(_g1 < _g) {
  6153.             var i = _g1++;
  6154.             chars.push(HxOverrides.cca(str,i));
  6155.         }
  6156.         var _g1 = 0, _g = this.length;
  6157.         while(_g1 < _g) {
  6158.             var i = _g1++;
  6159.             var c = this.b[i];
  6160.             s.b += String.fromCharCode(chars[c >> 4]);
  6161.             s.b += String.fromCharCode(chars[c & 15]);
  6162.         }
  6163.         return s.b;
  6164.     }
  6165.     ,toString: function() {
  6166.         return this.readString(0,this.length);
  6167.     }
  6168.     ,readString: function(pos,len) {
  6169.         if(pos < 0 || len < 0 || pos + len > this.length) throw haxe.io.Error.OutsideBounds;
  6170.         var s = "";
  6171.         var b = this.b;
  6172.         var fcc = String.fromCharCode;
  6173.         var i = pos;
  6174.         var max = pos + len;
  6175.         while(i < max) {
  6176.             var c = b[i++];
  6177.             if(c < 128) {
  6178.                 if(c == 0) break;
  6179.                 s += fcc(c);
  6180.             } else if(c < 224) s += fcc((c & 63) << 6 | b[i++] & 127); else if(c < 240) {
  6181.                 var c2 = b[i++];
  6182.                 s += fcc((c & 31) << 12 | (c2 & 127) << 6 | b[i++] & 127);
  6183.             } else {
  6184.                 var c2 = b[i++];
  6185.                 var c3 = b[i++];
  6186.                 s += fcc((c & 15) << 18 | (c2 & 127) << 12 | c3 << 6 & 127 | b[i++] & 127);
  6187.             }
  6188.         }
  6189.         return s;
  6190.     }
  6191.     ,compare: function(other) {
  6192.         var b1 = this.b;
  6193.         var b2 = other.b;
  6194.         var len = this.length < other.length?this.length:other.length;
  6195.         var _g = 0;
  6196.         while(_g < len) {
  6197.             var i = _g++;
  6198.             if(b1[i] != b2[i]) return b1[i] - b2[i];
  6199.         }
  6200.         return this.length - other.length;
  6201.     }
  6202.     ,sub: function(pos,len) {
  6203.         if(pos < 0 || len < 0 || pos + len > this.length) throw haxe.io.Error.OutsideBounds;
  6204.         return new haxe.io.Bytes(len,this.b.slice(pos,pos + len));
  6205.     }
  6206.     ,blit: function(pos,src,srcpos,len) {
  6207.         if(pos < 0 || srcpos < 0 || len < 0 || pos + len > this.length || srcpos + len > src.length) throw haxe.io.Error.OutsideBounds;
  6208.         var b1 = this.b;
  6209.         var b2 = src.b;
  6210.         if(b1 == b2 && pos > srcpos) {
  6211.             var i = len;
  6212.             while(i > 0) {
  6213.                 i--;
  6214.                 b1[i + pos] = b2[i + srcpos];
  6215.             }
  6216.             return;
  6217.         }
  6218.         var _g = 0;
  6219.         while(_g < len) {
  6220.             var i = _g++;
  6221.             b1[i + pos] = b2[i + srcpos];
  6222.         }
  6223.     }
  6224.     ,set: function(pos,v) {
  6225.         this.b[pos] = v & 255;
  6226.     }
  6227.     ,get: function(pos) {
  6228.         return this.b[pos];
  6229.     }
  6230.     ,__class__: haxe.io.Bytes
  6231. }
  6232. haxe.io.Error = { __ename__ : true, __constructs__ : ["Blocked","Overflow","OutsideBounds","Custom"] }
  6233. haxe.io.Error.Blocked = ["Blocked",0];
  6234. haxe.io.Error.Blocked.toString = $estr;
  6235. haxe.io.Error.Blocked.__enum__ = haxe.io.Error;
  6236. haxe.io.Error.Overflow = ["Overflow",1];
  6237. haxe.io.Error.Overflow.toString = $estr;
  6238. haxe.io.Error.Overflow.__enum__ = haxe.io.Error;
  6239. haxe.io.Error.OutsideBounds = ["OutsideBounds",2];
  6240. haxe.io.Error.OutsideBounds.toString = $estr;
  6241. haxe.io.Error.OutsideBounds.__enum__ = haxe.io.Error;
  6242. haxe.io.Error.Custom = function(e) { var $x = ["Custom",3,e]; $x.__enum__ = haxe.io.Error; $x.toString = $estr; return $x; }
  6243. if(!haxe.web) haxe.web = {}
  6244. haxe.web.Request = function() { }
  6245. haxe.web.Request.__name__ = true;
  6246. haxe.web.Request.getParams = function() {
  6247.     var get = window.location.search.substr(1);
  6248.     var params = new Hash();
  6249.     var _g = 0, _g1 = new EReg("[&;]","g").split(get);
  6250.     while(_g < _g1.length) {
  6251.         var p = _g1[_g];
  6252.         ++_g;
  6253.         var pl = p.split("=");
  6254.         if(pl.length < 2) continue;
  6255.         var name = pl.shift();
  6256.         params.set(StringTools.urlDecode(name),StringTools.urlDecode(pl.join("=")));
  6257.     }
  6258.     return params;
  6259. }
  6260. haxe.web.Request.getHostName = function() {
  6261.     return window.location.host;
  6262. }
  6263. haxe.web.Request.getURI = function() {
  6264.     return window.location.pathname;
  6265. }
  6266. if(!haxe.xml) haxe.xml = {}
  6267. if(!haxe.xml._Fast) haxe.xml._Fast = {}
  6268. haxe.xml._Fast.NodeAccess = function(x) {
  6269.     this.__x = x;
  6270. };
  6271. haxe.xml._Fast.NodeAccess.__name__ = true;
  6272. haxe.xml._Fast.NodeAccess.prototype = {
  6273.     resolve: function(name) {
  6274.         var x = this.__x.elementsNamed(name).next();
  6275.         if(x == null) {
  6276.             var xname = this.__x.nodeType == Xml.Document?"Document":this.__x.getNodeName();
  6277.             throw xname + " is missing element " + name;
  6278.         }
  6279.         return new haxe.xml.Fast(x);
  6280.     }
  6281.     ,__class__: haxe.xml._Fast.NodeAccess
  6282. }
  6283. haxe.xml._Fast.AttribAccess = function(x) {
  6284.     this.__x = x;
  6285. };
  6286. haxe.xml._Fast.AttribAccess.__name__ = true;
  6287. haxe.xml._Fast.AttribAccess.prototype = {
  6288.     resolve: function(name) {
  6289.         if(this.__x.nodeType == Xml.Document) throw "Cannot access document attribute " + name;
  6290.         var v = this.__x.get(name);
  6291.         if(v == null) throw this.__x.getNodeName() + " is missing attribute " + name;
  6292.         return v;
  6293.     }
  6294.     ,__class__: haxe.xml._Fast.AttribAccess
  6295. }
  6296. haxe.xml._Fast.HasAttribAccess = function(x) {
  6297.     this.__x = x;
  6298. };
  6299. haxe.xml._Fast.HasAttribAccess.__name__ = true;
  6300. haxe.xml._Fast.HasAttribAccess.prototype = {
  6301.     resolve: function(name) {
  6302.         if(this.__x.nodeType == Xml.Document) throw "Cannot access document attribute " + name;
  6303.         return this.__x.exists(name);
  6304.     }
  6305.     ,__class__: haxe.xml._Fast.HasAttribAccess
  6306. }
  6307. haxe.xml._Fast.HasNodeAccess = function(x) {
  6308.     this.__x = x;
  6309. };
  6310. haxe.xml._Fast.HasNodeAccess.__name__ = true;
  6311. haxe.xml._Fast.HasNodeAccess.prototype = {
  6312.     resolve: function(name) {
  6313.         return this.__x.elementsNamed(name).hasNext();
  6314.     }
  6315.     ,__class__: haxe.xml._Fast.HasNodeAccess
  6316. }
  6317. haxe.xml._Fast.NodeListAccess = function(x) {
  6318.     this.__x = x;
  6319. };
  6320. haxe.xml._Fast.NodeListAccess.__name__ = true;
  6321. haxe.xml._Fast.NodeListAccess.prototype = {
  6322.     resolve: function(name) {
  6323.         var l = new List();
  6324.         var $it0 = this.__x.elementsNamed(name);
  6325.         while( $it0.hasNext() ) {
  6326.             var x = $it0.next();
  6327.             l.add(new haxe.xml.Fast(x));
  6328.         }
  6329.         return l;
  6330.     }
  6331.     ,__class__: haxe.xml._Fast.NodeListAccess
  6332. }
  6333. haxe.xml.Fast = function(x) {
  6334.     if(x.nodeType != Xml.Document && x.nodeType != Xml.Element) throw "Invalid nodeType " + Std.string(x.nodeType);
  6335.     this.x = x;
  6336.     this.node = new haxe.xml._Fast.NodeAccess(x);
  6337.     this.nodes = new haxe.xml._Fast.NodeListAccess(x);
  6338.     this.att = new haxe.xml._Fast.AttribAccess(x);
  6339.     this.has = new haxe.xml._Fast.HasAttribAccess(x);
  6340.     this.hasNode = new haxe.xml._Fast.HasNodeAccess(x);
  6341. };
  6342. haxe.xml.Fast.__name__ = true;
  6343. haxe.xml.Fast.prototype = {
  6344.     getElements: function() {
  6345.         var it = this.x.elements();
  6346.         return { hasNext : $bind(it,it.hasNext), next : function() {
  6347.             var x = it.next();
  6348.             if(x == null) return null;
  6349.             return new haxe.xml.Fast(x);
  6350.         }};
  6351.     }
  6352.     ,getInnerHTML: function() {
  6353.         var s = new StringBuf();
  6354.         var $it0 = this.x.iterator();
  6355.         while( $it0.hasNext() ) {
  6356.             var x = $it0.next();
  6357.             s.b += Std.string(x.toString());
  6358.         }
  6359.         return s.b;
  6360.     }
  6361.     ,getInnerData: function() {
  6362.         var it = this.x.iterator();
  6363.         if(!it.hasNext()) throw this.getName() + " does not have data";
  6364.         var v = it.next();
  6365.         var n = it.next();
  6366.         if(n != null) {
  6367.             if(v.nodeType == Xml.PCData && n.nodeType == Xml.CData && StringTools.trim(v.getNodeValue()) == "") {
  6368.                 var n2 = it.next();
  6369.                 if(n2 == null || n2.nodeType == Xml.PCData && StringTools.trim(n2.getNodeValue()) == "" && it.next() == null) return n.getNodeValue();
  6370.             }
  6371.             throw this.getName() + " does not only have data";
  6372.         }
  6373.         if(v.nodeType != Xml.PCData && v.nodeType != Xml.CData) throw this.getName() + " does not have data";
  6374.         return v.getNodeValue();
  6375.     }
  6376.     ,getName: function() {
  6377.         return this.x.nodeType == Xml.Document?"Document":this.x.getNodeName();
  6378.     }
  6379.     ,__class__: haxe.xml.Fast
  6380. }
  6381. haxe.xml.Parser = function() { }
  6382. haxe.xml.Parser.__name__ = true;
  6383. haxe.xml.Parser.parse = function(str) {
  6384.     var doc = Xml.createDocument();
  6385.     haxe.xml.Parser.doParse(str,0,doc);
  6386.     return doc;
  6387. }
  6388. haxe.xml.Parser.doParse = function(str,p,parent) {
  6389.     if(p == null) p = 0;
  6390.     var xml = null;
  6391.     var state = 1;
  6392.     var next = 1;
  6393.     var aname = null;
  6394.     var start = 0;
  6395.     var nsubs = 0;
  6396.     var nbrackets = 0;
  6397.     var c = str.charCodeAt(p);
  6398.     while(!(c != c)) {
  6399.         switch(state) {
  6400.         case 0:
  6401.             switch(c) {
  6402.             case 10:case 13:case 9:case 32:
  6403.                 break;
  6404.             default:
  6405.                 state = next;
  6406.                 continue;
  6407.             }
  6408.             break;
  6409.         case 1:
  6410.             switch(c) {
  6411.             case 60:
  6412.                 state = 0;
  6413.                 next = 2;
  6414.                 break;
  6415.             default:
  6416.                 start = p;
  6417.                 state = 13;
  6418.                 continue;
  6419.             }
  6420.             break;
  6421.         case 13:
  6422.             if(c == 60) {
  6423.                 var child = Xml.createPCData(HxOverrides.substr(str,start,p - start));
  6424.                 parent.addChild(child);
  6425.                 nsubs++;
  6426.                 state = 0;
  6427.                 next = 2;
  6428.             }
  6429.             break;
  6430.         case 17:
  6431.             if(c == 93 && str.charCodeAt(p + 1) == 93 && str.charCodeAt(p + 2) == 62) {
  6432.                 var child = Xml.createCData(HxOverrides.substr(str,start,p - start));
  6433.                 parent.addChild(child);
  6434.                 nsubs++;
  6435.                 p += 2;
  6436.                 state = 1;
  6437.             }
  6438.             break;
  6439.         case 2:
  6440.             switch(c) {
  6441.             case 33:
  6442.                 if(str.charCodeAt(p + 1) == 91) {
  6443.                     p += 2;
  6444.                     if(HxOverrides.substr(str,p,6).toUpperCase() != "CDATA[") throw "Expected <![CDATA[";
  6445.                     p += 5;
  6446.                     state = 17;
  6447.                     start = p + 1;
  6448.                 } else if(str.charCodeAt(p + 1) == 68 || str.charCodeAt(p + 1) == 100) {
  6449.                     if(HxOverrides.substr(str,p + 2,6).toUpperCase() != "OCTYPE") throw "Expected <!DOCTYPE";
  6450.                     p += 8;
  6451.                     state = 16;
  6452.                     start = p + 1;
  6453.                 } else if(str.charCodeAt(p + 1) != 45 || str.charCodeAt(p + 2) != 45) throw "Expected <!--"; else {
  6454.                     p += 2;
  6455.                     state = 15;
  6456.                     start = p + 1;
  6457.                 }
  6458.                 break;
  6459.             case 63:
  6460.                 state = 14;
  6461.                 start = p;
  6462.                 break;
  6463.             case 47:
  6464.                 if(parent == null) throw "Expected node name";
  6465.                 start = p + 1;
  6466.                 state = 0;
  6467.                 next = 10;
  6468.                 break;
  6469.             default:
  6470.                 state = 3;
  6471.                 start = p;
  6472.                 continue;
  6473.             }
  6474.             break;
  6475.         case 3:
  6476.             if(!(c >= 97 && c <= 122 || c >= 65 && c <= 90 || c >= 48 && c <= 57 || c == 58 || c == 46 || c == 95 || c == 45)) {
  6477.                 if(p == start) throw "Expected node name";
  6478.                 xml = Xml.createElement(HxOverrides.substr(str,start,p - start));
  6479.                 parent.addChild(xml);
  6480.                 state = 0;
  6481.                 next = 4;
  6482.                 continue;
  6483.             }
  6484.             break;
  6485.         case 4:
  6486.             switch(c) {
  6487.             case 47:
  6488.                 state = 11;
  6489.                 nsubs++;
  6490.                 break;
  6491.             case 62:
  6492.                 state = 9;
  6493.                 nsubs++;
  6494.                 break;
  6495.             default:
  6496.                 state = 5;
  6497.                 start = p;
  6498.                 continue;
  6499.             }
  6500.             break;
  6501.         case 5:
  6502.             if(!(c >= 97 && c <= 122 || c >= 65 && c <= 90 || c >= 48 && c <= 57 || c == 58 || c == 46 || c == 95 || c == 45)) {
  6503.                 var tmp;
  6504.                 if(start == p) throw "Expected attribute name";
  6505.                 tmp = HxOverrides.substr(str,start,p - start);
  6506.                 aname = tmp;
  6507.                 if(xml.exists(aname)) throw "Duplicate attribute";
  6508.                 state = 0;
  6509.                 next = 6;
  6510.                 continue;
  6511.             }
  6512.             break;
  6513.         case 6:
  6514.             switch(c) {
  6515.             case 61:
  6516.                 state = 0;
  6517.                 next = 7;
  6518.                 break;
  6519.             default:
  6520.                 throw "Expected =";
  6521.             }
  6522.             break;
  6523.         case 7:
  6524.             switch(c) {
  6525.             case 34:case 39:
  6526.                 state = 8;
  6527.                 start = p;
  6528.                 break;
  6529.             default:
  6530.                 throw "Expected \"";
  6531.             }
  6532.             break;
  6533.         case 8:
  6534.             if(c == str.charCodeAt(start)) {
  6535.                 var val = HxOverrides.substr(str,start + 1,p - start - 1);
  6536.                 xml.set(aname,val);
  6537.                 state = 0;
  6538.                 next = 4;
  6539.             }
  6540.             break;
  6541.         case 9:
  6542.             p = haxe.xml.Parser.doParse(str,p,xml);
  6543.             start = p;
  6544.             state = 1;
  6545.             break;
  6546.         case 11:
  6547.             switch(c) {
  6548.             case 62:
  6549.                 state = 1;
  6550.                 break;
  6551.             default:
  6552.                 throw "Expected >";
  6553.             }
  6554.             break;
  6555.         case 12:
  6556.             switch(c) {
  6557.             case 62:
  6558.                 if(nsubs == 0) parent.addChild(Xml.createPCData(""));
  6559.                 return p;
  6560.             default:
  6561.                 throw "Expected >";
  6562.             }
  6563.             break;
  6564.         case 10:
  6565.             if(!(c >= 97 && c <= 122 || c >= 65 && c <= 90 || c >= 48 && c <= 57 || c == 58 || c == 46 || c == 95 || c == 45)) {
  6566.                 if(start == p) throw "Expected node name";
  6567.                 var v = HxOverrides.substr(str,start,p - start);
  6568.                 if(v != parent.getNodeName()) throw "Expected </" + parent.getNodeName() + ">";
  6569.                 state = 0;
  6570.                 next = 12;
  6571.                 continue;
  6572.             }
  6573.             break;
  6574.         case 15:
  6575.             if(c == 45 && str.charCodeAt(p + 1) == 45 && str.charCodeAt(p + 2) == 62) {
  6576.                 parent.addChild(Xml.createComment(HxOverrides.substr(str,start,p - start)));
  6577.                 p += 2;
  6578.                 state = 1;
  6579.             }
  6580.             break;
  6581.         case 16:
  6582.             if(c == 91) nbrackets++; else if(c == 93) nbrackets--; else if(c == 62 && nbrackets == 0) {
  6583.                 parent.addChild(Xml.createDocType(HxOverrides.substr(str,start,p - start)));
  6584.                 state = 1;
  6585.             }
  6586.             break;
  6587.         case 14:
  6588.             if(c == 63 && str.charCodeAt(p + 1) == 62) {
  6589.                 p++;
  6590.                 var str1 = HxOverrides.substr(str,start + 1,p - start - 2);
  6591.                 parent.addChild(Xml.createProlog(str1));
  6592.                 state = 1;
  6593.             }
  6594.             break;
  6595.         }
  6596.         c = str.charCodeAt(++p);
  6597.     }
  6598.     if(state == 1) {
  6599.         start = p;
  6600.         state = 13;
  6601.     }
  6602.     if(state == 13) {
  6603.         if(p != start || nsubs == 0) parent.addChild(Xml.createPCData(HxOverrides.substr(str,start,p - start)));
  6604.         return p;
  6605.     }
  6606.     throw "Unexpected end";
  6607. }
  6608. haxe.xml.Parser.isValidChar = function(c) {
  6609.     return c >= 97 && c <= 122 || c >= 65 && c <= 90 || c >= 48 && c <= 57 || c == 58 || c == 46 || c == 95 || c == 45;
  6610. }
  6611. var js = js || {}
  6612. js.Boot = function() { }
  6613. js.Boot.__name__ = true;
  6614. js.Boot.__unhtml = function(s) {
  6615.     return s.split("&").join("&").split("<").join("<").split(">").join(">");
  6616. }
  6617. js.Boot.__trace = function(v,i) {
  6618.     var msg = i != null?i.fileName + ":" + i.lineNumber + ": ":"";
  6619.     msg += js.Boot.__string_rec(v,"");
  6620.     var d;
  6621.     if(typeof(document) != "undefined" && (d = document.getElementById("haxe:trace")) != null) d.innerHTML += js.Boot.__unhtml(msg) + "<br/>"; else if(typeof(console) != "undefined" && console.log != null) console.log(msg);
  6622. }
  6623. js.Boot.__clear_trace = function() {
  6624.     var d = document.getElementById("haxe:trace");
  6625.     if(d != null) d.innerHTML = "";
  6626. }
  6627. js.Boot.isClass = function(o) {
  6628.     return o.__name__;
  6629. }
  6630. js.Boot.isEnum = function(e) {
  6631.     return e.__ename__;
  6632. }
  6633. js.Boot.getClass = function(o) {
  6634.     return o.__class__;
  6635. }
  6636. js.Boot.__string_rec = function(o,s) {
  6637.     if(o == null) return "null";
  6638.     if(s.length >= 5) return "<...>";
  6639.     var t = typeof(o);
  6640.     if(t == "function" && (o.__name__ || o.__ename__)) t = "object";
  6641.     switch(t) {
  6642.     case "object":
  6643.         if(o instanceof Array) {
  6644.             if(o.__enum__) {
  6645.                 if(o.length == 2) return o[0];
  6646.                 var str = o[0] + "(";
  6647.                 s += "\t";
  6648.                 var _g1 = 2, _g = o.length;
  6649.                 while(_g1 < _g) {
  6650.                     var i = _g1++;
  6651.                     if(i != 2) str += "," + js.Boot.__string_rec(o[i],s); else str += js.Boot.__string_rec(o[i],s);
  6652.                 }
  6653.                 return str + ")";
  6654.             }
  6655.             var l = o.length;
  6656.             var i;
  6657.             var str = "[";
  6658.             s += "\t";
  6659.             var _g = 0;
  6660.             while(_g < l) {
  6661.                 var i1 = _g++;
  6662.                 str += (i1 > 0?",":"") + js.Boot.__string_rec(o[i1],s);
  6663.             }
  6664.             str += "]";
  6665.             return str;
  6666.         }
  6667.         var tostr;
  6668.         try {
  6669.             tostr = o.toString;
  6670.         } catch( e ) {
  6671.             return "???";
  6672.         }
  6673.         if(tostr != null && tostr != Object.toString) {
  6674.             var s2 = o.toString();
  6675.             if(s2 != "[object Object]") return s2;
  6676.         }
  6677.         var k = null;
  6678.         var str = "{\n";
  6679.         s += "\t";
  6680.         var hasp = o.hasOwnProperty != null;
  6681.         for( var k in o ) { ;
  6682.         if(hasp && !o.hasOwnProperty(k)) {
  6683.             continue;
  6684.         }
  6685.         if(k == "prototype" || k == "__class__" || k == "__super__" || k == "__interfaces__" || k == "__properties__") {
  6686.             continue;
  6687.         }
  6688.         if(str.length != 2) str += ", \n";
  6689.         str += s + k + " : " + js.Boot.__string_rec(o[k],s);
  6690.         }
  6691.         s = s.substring(1);
  6692.         str += "\n" + s + "}";
  6693.         return str;
  6694.     case "function":
  6695.         return "<function>";
  6696.     case "string":
  6697.         return o;
  6698.     default:
  6699.         return String(o);
  6700.     }
  6701. }
  6702. js.Boot.__interfLoop = function(cc,cl) {
  6703.     if(cc == null) return false;
  6704.     if(cc == cl) return true;
  6705.     var intf = cc.__interfaces__;
  6706.     if(intf != null) {
  6707.         var _g1 = 0, _g = intf.length;
  6708.         while(_g1 < _g) {
  6709.             var i = _g1++;
  6710.             var i1 = intf[i];
  6711.             if(i1 == cl || js.Boot.__interfLoop(i1,cl)) return true;
  6712.         }
  6713.     }
  6714.     return js.Boot.__interfLoop(cc.__super__,cl);
  6715. }
  6716. js.Boot.__instanceof = function(o,cl) {
  6717.     try {
  6718.         if(o instanceof cl) {
  6719.             if(cl == Array) return o.__enum__ == null;
  6720.             return true;
  6721.         }
  6722.         if(js.Boot.__interfLoop(o.__class__,cl)) return true;
  6723.     } catch( e ) {
  6724.         if(cl == null) return false;
  6725.     }
  6726.     switch(cl) {
  6727.     case Int:
  6728.         return Math.ceil(o%2147483648.0) === o;
  6729.     case Float:
  6730.         return typeof(o) == "number";
  6731.     case Bool:
  6732.         return o === true || o === false;
  6733.     case String:
  6734.         return typeof(o) == "string";
  6735.     case Dynamic:
  6736.         return true;
  6737.     default:
  6738.         if(o == null) return false;
  6739.         if(cl == Class && o.__name__ != null) return true; else null;
  6740.         if(cl == Enum && o.__ename__ != null) return true; else null;
  6741.         return o.__enum__ == cl;
  6742.     }
  6743. }
  6744. js.Boot.__cast = function(o,t) {
  6745.     if(js.Boot.__instanceof(o,t)) return o; else throw "Cannot cast " + Std.string(o) + " to " + Std.string(t);
  6746. }
  6747. js.Lib = function() { }
  6748. js.Lib.__name__ = true;
  6749. js.Lib.debug = function() {
  6750.     debugger;
  6751. }
  6752. js.Lib.alert = function(v) {
  6753.     alert(js.Boot.__string_rec(v,""));
  6754. }
  6755. js.Lib.eval = function(code) {
  6756.     return eval(code);
  6757. }
  6758. js.Lib.setErrorHandler = function(f) {
  6759.     js.Lib.onerror = f;
  6760. }
  6761. var orc = orc || {}
  6762. if(!orc.utils) orc.utils = {}
  6763. orc.utils.DrawHelper = function() { }
  6764. orc.utils.DrawHelper.__name__ = true;
  6765. orc.utils.DrawHelper.createFillStyle = function(cssStyleColor,alpha) {
  6766.     cssStyleColor = StringTools.replace(cssStyleColor,"0x","");
  6767.     cssStyleColor = StringTools.replace(cssStyleColor,"0X","");
  6768.     cssStyleColor = StringTools.replace(cssStyleColor,"#","");
  6769.     if(cssStyleColor.length == 6) {
  6770.         var r = Std.string(Std.parseInt("0x" + HxOverrides.substr(cssStyleColor,0,2)));
  6771.         var g = Std.string(Std.parseInt("0x" + HxOverrides.substr(cssStyleColor,2,2)));
  6772.         var b = Std.string(Std.parseInt("0x" + HxOverrides.substr(cssStyleColor,4,2)));
  6773.         return "rgba(" + r + "," + g + "," + b + "," + Std.string(alpha) + ")";
  6774.     }
  6775.     return "";
  6776. }
  6777. orc.utils.ImageMetricHelper = function(imgWidth,imgHeight) {
  6778.     this.width = imgWidth;
  6779.     this.height = imgHeight;
  6780.     this.diagonalLineTheta = Math.atan2(this.width,this.height);
  6781.     this.diagonalLineLength = Math.sqrt(this.width * this.width + this.height * this.height);
  6782. };
  6783. orc.utils.ImageMetricHelper.__name__ = true;
  6784. orc.utils.ImageMetricHelper.prototype = {
  6785.     getMaxFitScale: function(width,height,rotation) {
  6786.         if(rotation == null) rotation = 0;
  6787.         var scaleX;
  6788.         var scaleY;
  6789.         if(rotation == 0 || rotation == 180) {
  6790.             scaleX = width / this.width;
  6791.             scaleY = height / this.height;
  6792.         } else {
  6793.             var r = Math.PI * rotation / 180;
  6794.             var t0 = this.diagonalLineTheta + r;
  6795.             var w0 = Math.abs(this.diagonalLineLength * Math.sin(t0));
  6796.             var h0 = Math.abs(this.diagonalLineLength * Math.cos(t0));
  6797.             var t1 = -this.diagonalLineTheta + r;
  6798.             var w1 = Math.abs(this.diagonalLineLength * Math.sin(t1));
  6799.             var h1 = Math.abs(this.diagonalLineLength * Math.cos(t1));
  6800.             var w = Math.max(w0,w1);
  6801.             var h = Math.max(h0,h1);
  6802.             scaleX = width / w;
  6803.             scaleY = height / h;
  6804.         }
  6805.         return Math.min(scaleX,scaleY);
  6806.     }
  6807.     ,__class__: orc.utils.ImageMetricHelper
  6808. }
  6809. orc.utils.UrlParam = function() {
  6810. };
  6811. orc.utils.UrlParam.__name__ = true;
  6812. orc.utils.UrlParam.prototype = {
  6813.     __class__: orc.utils.UrlParam
  6814. }
  6815. orc.utils.Util = function() { }
  6816. orc.utils.Util.__name__ = true;
  6817. orc.utils.Util.request = function(url,call,onError) {
  6818.     var http = new haxe.Http(url);
  6819.     http.onData = call;
  6820.     http.onError = function(e) {
  6821.         if(onError != null) onError();
  6822.     };
  6823.     http.request(false);
  6824. }
  6825. orc.utils.Util.getUrlParam = function(key) {
  6826.     var params = orc.utils.Util.getUrlParams();
  6827.     var _g = 0;
  6828.     while(_g < params.length) {
  6829.         var param = params[_g];
  6830.         ++_g;
  6831.         var p = param;
  6832.         if(p.key == key) return p.value;
  6833.     }
  6834.     return "";
  6835. }
  6836. orc.utils.Util.getUrlParams = function() {
  6837.     var url = js.Lib.window.location.href;
  6838.     var results = new Array();
  6839.     var index = url.indexOf("?");
  6840.     if(index > 0) {
  6841.         var params = HxOverrides.substr(url,index + 1,null);
  6842.         var lines = params.split("&");
  6843.         var _g = 0;
  6844.         while(_g < lines.length) {
  6845.             var line = lines[_g];
  6846.             ++_g;
  6847.             var terms = line.split("=");
  6848.             if(terms.length == 2) {
  6849.                 var val = new orc.utils.UrlParam();
  6850.                 val.key = terms[0];
  6851.                 val.value = terms[1];
  6852.                 results.push(val);
  6853.             }
  6854.         }
  6855.     }
  6856.     return results;
  6857. }
  6858. orc.utils.Util.getXmlChilds = function(xml) {
  6859.     var i = xml.elements();
  6860.     var list = new Array();
  6861.     while(i.hasNext() == true) {
  6862.         var node = i.next();
  6863.         list.push(node);
  6864.     }
  6865.     return list;
  6866. }
  6867. orc.utils.Util.searchPos = function(txt,keyword) {
  6868.     var list = [];
  6869.     var index = -1;
  6870.     while(true) {
  6871.         var from = 0;
  6872.         if(index != -1) {
  6873.             from = index + keyword.length;
  6874.             if(from < 0) from = 0;
  6875.         }
  6876.         index = txt.indexOf(keyword,from);
  6877.         if(index > -1 && index + keyword.length <= txt.length) list.push(index); else break;
  6878.     }
  6879.     return list;
  6880. }
  6881. orc.utils.Util.createSearchResults = function(txt,keyword,posList,page) {
  6882.     var results = [];
  6883.     var maxChars = 50;
  6884.     var coloredWord = "<font color='#FF0000'>" + keyword + "</font>";
  6885.     var _g1 = 0, _g = posList.length;
  6886.     while(_g1 < _g) {
  6887.         var i = _g1++;
  6888.         var index = posList[i];
  6889.         var r = new core.SearchResult("",page);
  6890.         var offset = index;
  6891.         if(txt.length < maxChars) r.content = txt; else {
  6892.             var from = index - Math.max(0,maxChars - keyword.length) / 2 | 0;
  6893.             if(from < 0) from = 0;
  6894.             r.content = HxOverrides.substr(txt,from,maxChars);
  6895.             offset = index - from;
  6896.             if(from + maxChars < txt.length) r.content += " ...";
  6897.             if(from > 0) {
  6898.                 r.content = "... " + r.content;
  6899.                 offset += 4;
  6900.             }
  6901.         }
  6902.         r.content = HxOverrides.substr(r.content,0,offset) + "<font color='#FF0000'>" + HxOverrides.substr(r.content,offset,keyword.length) + "</font>" + HxOverrides.substr(r.content,offset + keyword.length,null);
  6903.         results.push(r);
  6904.     }
  6905.     return results;
  6906. }
  6907. var $_;
  6908. function $bind(o,m) { var f = function(){ return f.method.apply(f.scope, arguments); }; f.scope = o; f.method = m; return f; };
  6909. if(Array.prototype.indexOf) HxOverrides.remove = function(a,o) {
  6910.     var i = a.indexOf(o);
  6911.     if(i == -1) return false;
  6912.     a.splice(i,1);
  6913.     return true;
  6914. }; else null;
  6915. Math.__name__ = ["Math"];
  6916. Math.NaN = Number.NaN;
  6917. Math.NEGATIVE_INFINITY = Number.NEGATIVE_INFINITY;
  6918. Math.POSITIVE_INFINITY = Number.POSITIVE_INFINITY;
  6919. Math.isFinite = function(i) {
  6920.     return isFinite(i);
  6921. };
  6922. Math.isNaN = function(i) {
  6923.     return isNaN(i);
  6924. };
  6925. String.prototype.__class__ = String;
  6926. String.__name__ = true;
  6927. Array.prototype.__class__ = Array;
  6928. Array.__name__ = true;
  6929. Date.prototype.__class__ = Date;
  6930. Date.__name__ = ["Date"];
  6931. var Int = { __name__ : ["Int"]};
  6932. var Dynamic = { __name__ : ["Dynamic"]};
  6933. var Float = Number;
  6934. Float.__name__ = ["Float"];
  6935. var Bool = Boolean;
  6936. Bool.__ename__ = ["Bool"];
  6937. var Class = { __name__ : ["Class"]};
  6938. var Enum = { };
  6939. var Void = { __ename__ : ["Void"]};
  6940. Xml.Element = "element";
  6941. Xml.PCData = "pcdata";
  6942. Xml.CData = "cdata";
  6943. Xml.Comment = "comment";
  6944. Xml.DocType = "doctype";
  6945. Xml.Prolog = "prolog";
  6946. Xml.Document = "document";
  6947. if(typeof document != "undefined") js.Lib.document = document;
  6948. if(typeof window != "undefined") {
  6949.     js.Lib.window = window;
  6950.     js.Lib.window.onerror = function(msg,url,line) {
  6951.         var f = js.Lib.onerror;
  6952.         if(f == null) return false;
  6953.         return f(msg,[url + ":" + line]);
  6954.     };
  6955. }
  6956. js.XMLHttpRequest = window.XMLHttpRequest?XMLHttpRequest:window.ActiveXObject?function() {
  6957.     try {
  6958.         return new ActiveXObject("Msxml2.XMLHTTP");
  6959.     } catch( e ) {
  6960.         try {
  6961.             return new ActiveXObject("Microsoft.XMLHTTP");
  6962.         } catch( e1 ) {
  6963.             throw "Unable to create XMLHttpRequest object.";
  6964.         }
  6965.     }
  6966. }:(function($this) {
  6967.     var $r;
  6968.     throw "Unable to create XMLHttpRequest object.";
  6969.     return $r;
  6970. }(this));
  6971. L.instance = new Hash();
  6972. RunTime.useGoogleUaAsLogViewer = true;
  6973. RunTime.urlIndex = "html5forwebkit.html";
  6974. RunTime.urlZoom = "zoom.html";
  6975. RunTime.urlRoot = "";
  6976. RunTime.urlBookinfo = RunTime.urlRoot + "data/bookinfo.xml";
  6977. RunTime.urlPageInfo = RunTime.urlRoot + "data/pages.xml";
  6978. RunTime.urlHotlinks = RunTime.urlRoot + "data/hotlinks.xml";
  6979. RunTime.urlContents = RunTime.urlRoot + "data/contents.xml";
  6980. RunTime.urlSearch = RunTime.urlRoot + "data/search.xml";
  6981. RunTime.urlVideos = RunTime.urlRoot + "data/videos.xml";
  6982. RunTime.urlButtons = RunTime.urlRoot + "data/buttons.xml";
  6983. RunTime.urlAudios = RunTime.urlRoot + "data/sounds.xml";
  6984. RunTime.urlBookmarks = RunTime.urlRoot + "data/bookmarks.xml";
  6985. RunTime.urlLang = RunTime.urlRoot + "data/languages/languages.xml";
  6986. RunTime.urlSlideshow = RunTime.urlRoot + "data/slideshow.xml";
  6987. RunTime.urlShareInfo = RunTime.urlRoot + "data/share.xml";
  6988. RunTime.urlAbout = RunTime.urlRoot + "data/copyright.xml";
  6989. RunTime.searchHtmlCache = "";
  6990. RunTime.inputHtmlCache = "";
  6991. RunTime.languages = new Array();
  6992. RunTime.book = new core.Book();
  6993. RunTime.singlePage = false;
  6994. RunTime.bookTop = 0;
  6995. RunTime.bookBottom = 0;
  6996. RunTime.bookLeft = 0;
  6997. RunTime.bookRight = 0;
  6998. RunTime.pcode = "";
  6999. RunTime.bottomBarAlpha = 0.6;
  7000. RunTime.bottomBarHeight = 40;
  7001. RunTime.autoflipButtonUnselectedAlpha = 0.5;
  7002. RunTime.doubleClickIntervalMs = 300;
  7003. RunTime.doubleZoomIntervalMs = 1000;
  7004. RunTime.highLights = new Array();
  7005. RunTime.notes = new Array();
  7006. RunTime.bLocked = true;
  7007. RunTime.allLoadImage = 0;
  7008. RunTime.allCurrentImage = 0;
  7009. RunTime.kvPrex = "";
  7010. RunTime.key = "";
  7011. RunTime.slideshowPopupHtml = "";
  7012. Zoom.imgSrc = "";
  7013. Zoom.pageNum = "";
  7014. Zoom.bookId = "";
  7015. Zoom.analyticsUA = "";
  7016. Zoom.bookTitle = "";
  7017. Zoom.bbv = "";
  7018. Zoom.pcode = "";
  7019. Zoom.hotlinks = [];
  7020. Zoom.videos = [];
  7021. Zoom.buttons = [];
  7022. Zoom.xOffset = 0;
  7023. Zoom.yOffset = 0;
  7024. Zoom.popupXOffset = 0;
  7025. Zoom.popupYOffset = 0;
  7026. core.HtmlHelper.lv = 0;
  7027. Main.main();
  7028.